oracle 利用sql语句如何保存一个java string oracle加序列号到字段

Oracle中如何用SQL检测字段是否包括中文字符_数据库技术_Linux公社-Linux系统门户网站
你好,游客
Oracle中如何用SQL检测字段是否包括中文字符
来源:Linux社区&
作者:wei841118z
方法1:用编码转换函数Convert;
方法2:通过判断字符长度与字节长度是否一致看出是否有中文( WHERE length('ab测试cd') != lengthb('ab测试cd') )。
今天有一个同事的数据迁移程序有个问题,没有考虑中文编码字符,由于迁移的表有几千万数据,但是有中文的记录集很少,问我能否找出有中文内容的记录数。首先我想到的是采用检测每个字节ASCII的方式,这样的话需要写一个自定义函数,然后SQL中调用得到结果。但是感觉这个方法估计很耗时,毕竟每个字符都要比较,所以没有去实现。突然想到有一个编码转换的函数叫Convert,如果一个字符串编码转换前后不一样就表示字符串里面含有非ASCII字符,这样就得到结果。最后写出来测试了一下,确实可行,5500万记录10秒钟就扫描结束。以下是测试用例:
SQL& select *2 from (select 'abcd' c1 from dual3 union all4 select 'ab测试cd' c1 from dual)5 where c1 && CONVERT(c1, 'US7ASCII', 'ZHS16GBK');
C1--------ab测试cd
CONVERT函数说明:
CONVERT(inputstring,dest_charset,source_charset)
inputstring:要转换的字符串
dest_charset:目标字符集
source_charset:原字符集
这只是一个小技巧,也许有一天你也有这样的需求,或许能派上用场。
相关资讯 & & &
& (08/14/:56)
& (10/23/:59)
& (09/17/:13)
& (05/26/:29)
& (09/15/:43)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款评论- 885&
定义一个表mi_prodces有两个字段cs_id&&&& intcs_verid&& int其中id可以重复,但是cid值是增长的,也就是说同一个id对应多个cid,现在要查出某个id下,最大的cid,id只能显示一次。试着用oracle的distinct语句,但是distinct语句只能对一个字段起作用,可以采用的方法是如下语句。select a.cs_id ,a.cs_verid,a.cs_code from mi_prodces awhere cs_verid in (select max(cs_verid) from mi_prodces b where a.cs_id = b.cs_id)很多人可能都遇到类似的问题,记录于此。
阅读(...) 评论()oracle 利用sql语句如何保存一个string加序列号到字段_百度知道
oracle 利用sql语句如何保存一个string加序列号到字段
提问者采纳
.nextval where .update xxtable set
xxcolumn = str +seq
提问者评价
其他类似问题
为您推荐:
其他1条回答
没看明白,能举个例子吗
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁Oracle 动态SQL语句(4)之存储过程的调用与浅谈字符串的使用 - WY_laoK - 博客园
Powered by:
模板提供:
&&& 在开发的过程中用编程语言调用存储过程时,一定要注意调用存储过程中参数的个数、类型与名称相匹配。
例子如下:
public void Store()
// HaveTime = pareTo(StartTime);
TimeSpan timeSp = new TimeSpan();
timeSp = EndTime - StartT
HaveTime = Convert.ToInt64(timeSp.TotalSeconds);
OracleParameter[] parms ={
new OracleParameter("I_ID",OracleType.NVarChar),
new OracleParameter("I_STARTTIME",OracleType.NVarChar),
new OracleParameter("I_ENDTIME",OracleType.NVarChar),
new OracleParameter("I_HAVETIME",OracleType.Number),
new OracleParameter("I_MAXTIME",OracleType.NVarChar),
new OracleParameter("I_MAXV",OracleType.Double),
new OracleParameter("I_AVGV",OracleType.Double),
new OracleParameter("I_MINV",OracleType.Double),
new OracleParameter("I_CUOSHI",OracleType.NVarChar),
new OracleParameter("I_BY",OracleType.NVarChar)
parms[0].Value = SensorID.ToString();
parms[1].Value = StartTime.ToString();
parms[2].Value = EndTime.ToString();
parms[3].Value = HaveT//HaveTime
parms[4].Value = MaxTime.ToString();
parms[5].Value = MaxV;//0
parms[6].Value = AvgV;//0
parms[7].Value = MinV;//0
parms[8].Value = CuoS
parms[9].Value = WarnBy;
OracleHelper.ExecuteNonQuery(OracleHelper.connectionString, CommandType.StoredProcedure, "SP_INSERT_WARN", parms);
&存储过程如下:
create or replace procedure sp_insert_warn(i_id in nvarchar2,
i_starttime in nvarchar2,
i_endtime in nvarchar2,
i_havetime in number,
i_maxtime in nvarchar2,
i_maxv in BINARY_DOUBLE,
i_avgv in BINARY_DOUBLE,
i_minv in BINARY_DOUBLE,
i_cuoshi in nvarchar2,
i_by in nvarchar2)
authid current_user as
/********************************
名称:sp_update_openclose
功能描述:插入一条新的报警记录
修订记录:
1.创建此存储过程
入参出参描述:
i_id 测点编号
i_starttime 开始时间
i_havetime
最大值出现的时间
*********************************/
INSERT INTO warn
VALUES(i_id,to_date(i_starttime,'yyyy-mm-dd hh24-mi-ss'),to_date(i_endtime,'yyyy-mm-dd hh24-mi-ss'),
i_havetime,to_date(i_maxtime,'yyyy-mm-dd hh24-mi-ss'),i_maxv,i_avgv,i_minv,i_cuoshi,i_by);
commit;--数据更新到表中
end sp_insert_
&& 在我用C#语言调用存储过程中因为最大值参数i_maxv写成了i_mavv调用就出现了错误。
当把存储过程中输入的字符类型改为NVARCHAR2时,直接执行动态SQL语句出现错误,必须定义一个中间字符串才行(VARCHAR2类型)。
如下列PL/SQL代码:
v_sql_statement varchar2(500);--执行的SQL语句
v_sql_statement:='UPDATE '||v_tablename||'
SET MIN05='||i_min05||',AVG05='||i_avg05||',MAX05='||i_max05||'
,MINHOUR='||i_minhour||',AVGHOUR='||i_avghour||',MAXHOUR='||i_maxhour||'
,MAXTIME=to_date('''||i_maxtime||''',''yyyy-mm-dd hh24-mi-ss'')
,MINTIME=to_date('''||i_mintime||''',''yyyy-mm-dd hh24-mi-ss'')
WHERE DATETIME=to_date('''||i_realtime||''',''yyyy-mm-dd hh24-mi-ss'')';
execute immediate
阅读(...) 评论()用SQL将Oracle中同一列的多行记录拼接成一个字符串
用SQL将中同一列的多行记录拼接成一个字符串
-- 原始数据 &
-- a & 111 &
-- b & 222 &
-- a & 333 &
-- a & 444 &
-- b & 555 &
-- 最终结果 &
-- a & 111*333*444 &
L4.L_TIME &
,MAX(SUBSTR(L4.分组内容,2)) 最终字段值 &
& & & & SELECT &&
& & & & L3.L_TIME &
& & & & ,SYS_CONNECT_BY_PATH(L3.L_CONTENT,'*') AS 分组内容 &
& & & & FROM( &
& & & & & & & & SELECT &
& & & & & & & & L2.L_TIME &
& & & & & & & & ,L2.L_CONTENT &
& & & & & & & & ,L2.L_TIME||L2.分组内编号 AS 分组字段加编号,L2.L_TIME||(L2.分组内编号-1) AS 上级分组字段加编号 &
& & & & & & & & FROM( &
& & & & & & & & & & & & SELECT &&
& & & & & & & & & & & & L1.L_TIME & -- 分组依据 &
& & & & & & & & & & & & ,L1.L_CONTENT & &-- 同一列中 要合并的不同行 的值 &
& & & & & & & & & & & & ,ROW_NUMBER() OVER (PARTITION BY L1.L_TIME ORDER BY L1.L_CONTENT ASC) 分组内编号 &&
& & & & & & & & & & & & FROM LOGS L1 &
& & & & & & & & ) L2 &
& & & & ) L3 &
& & & & START WITH L3.上级分组字段加编号 LIKE '%0' &&
& & & & CONNECT BY PRIOR L3.分组字段加编号=L3.上级分组字段加编号 &
WHERE L_TIME='111' &
GROUP BY L4.L_TIME &
-- ROW_NUMBER() OVER(PARTITION BY A ORDER BY B DESC) 新列名 &
-- 根据A分组,在分组内部根据B排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的) &
-- SYS_CONNECT_BY_PATH 函数: 第一个参数是形成树形式的字段,第二个参数是父级和其子级分隔显示用的分隔符 &
-- CONNECT BY PRIOR 是标示父子关系的对应 &
-- START WITH 代表你要开始遍历的的节点 &
------------------------------------------------------------------------------------------ &
------------------------------------------------------------------------------------------ &
附上建表语句: &
DROP TABLE LOGS; &
CREATE TABLE LOGS ( &
L_ID VARCHAR2(32) NOT NULL , &
L_CONTENT VARCHAR2(512) &, &
L_TIME VARCHAR2(32) , &
L_USER VARCHAR2(32) , &
PRIMARY KEY (L_ID) &
COMMENT ON TABLE LOGS IS '日志表'; &
COMMENT ON COLUMN LOGS.L_ID IS '日志ID'; &
COMMENT ON COLUMN LOGS.L_CONTENT IS '日志内容'; &
COMMENT ON COLUMN LOGS.L_TIME IS '时间'; &
COMMENT ON COLUMN LOGS.L_USER IS '操作人'; &
INSERT INTO LOGS (L_ID, L_CONTENT, L_TIME, L_USER) &VALUES ('123', '黑啊', '111', '12345'); &
INSERT INTO LOGS (L_ID, L_CONTENT, L_TIME, L_USER) &VALUES ('124', '白啊', '222', ';); &
INSERT INTO LOGS (L_ID, L_CONTENT, L_TIME, L_USER) &VALUES ('125', '黑白啊', '111', ';); &
INSERT INTO LOGS (L_ID, L_CONTENT, L_TIME, L_USER) &VALUES ('126', '白白啊', '111', '12345'); &
INSERT INTO LOGS (L_ID, L_CONTENT, L_TIME, L_USER) &VALUES ('127', '嘿嘿啊', '222', ';); &
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。

我要回帖

更多关于 java string oracle 的文章

 

随机推荐