扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
sqlserver中的isnull跟oracle中的nvl相似。
成都创新互联主营古蔺网站建设的网络公司,主营网站建设方案,成都App制作,古蔺h5重庆小程序开发公司搭建,古蔺网站营销推广欢迎古蔺等地区企业咨询
ISNULL
使用指定的替换值替换 NULL。
语法
ISNULL ( check_expression , replacement_value )
参数
check_expression
将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。
replacement_value
在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。
返回类型
返回与 check_expression 相同的类型。
注释
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。
从 from dual看这是orcle的sql语法,因为dual是oracle的虚拟表,只有oracle有,当然你说在sqlserver中有个表叫dual,那没办法了,那就不一样了
orale中||起字符连接的作用
例 select 'A'||'B' from dual 输出的结构就是AB,对应sqlserver语法是select 'A'+'B'
replace 是字符替换函数,作用是将一个字段中指定的字符串换成其他的字符串
例 select replace(p_fwzz,'A','F') from dual 含义就是只要p_fwzz字段中的数据含字符A,则把A都换成F
剩下就是最麻烦的单引号了
因为单引号是关键字符号,所以要在数据中操作单引号要注意
举个例子:
需要显示结果A
select 'A' from dual,ok没问题
需要显示结果为'
如果写成select ''' from dual就是错的,必须写成select '''' from dual才行
所以select ''''||','||'''' from dual 的输出结果是','
关键的字符和函数我已经解释了完了,至于你写的那个语句是什么意思你可自行按我说的方式研究一下,我就不告诉你了,这样才能学到东西
顺便说一下,你的sql语句有问题 dual 是oracle的虚拟表,是没有实际字段的,所以replace(p_fwzz,',',''''||','||'''')这段是没意义滴!
有办法的,不过要慎用
先为表1增加两个字段,一个是begin_name 一个是end_name
然后update这两个字段
替换为第三个字段里的前4位和后4位,用substr函数
再然后拼接一下字符串替换一下
最后把新增的两个字段弄掉
----------------补充-------------
具体步骤
1.alter table 表1 add begin_name varchar2(24) NULL;
alter table 表1 add end_name varchar2(24) NULL;
长度自己定义,足够长就行,以后这里要存放表2的字段3
2.update 表1 set begin_name=substr(字段3,1,4);
update 表1 set end_name=substr(字段3,-4,4);
commit;
3.update 表1 a set a.begin_name=(select b.字段3 from 表1 b where a.字 段1=b.字段1);
update 表1 a set a.end_name=(select b.字段3 from 表1 b where a.字段1=b.字段1);
commit;
4.update 表1 set 字段3=begin_name||'~'||end_name;
commit;
5.drop那俩字段,这个不用我写了吧?
还有点问题,如果象你第三条纪录,那你就判断一下字段3的长度就行了,这个改起来又不难
我写的很详细了啊,你只要把表1表2和字段名换成你自己数据库里的不就行了吗
如果保险一点的话最好加一个条件限制,就是where name like '%武汉生物',这样替换的都是以“武汉生物”结尾的行
Transact-SQL 参考
IDENTITY(属性)
在表中创建一个标识列。该属性与 CREATE TABLE 及 ALTER TABLE Transact-SQL 语句一起使用。
说明 IDENTITY 属性与 SQL-DMO Identity 属性不同,后者表现列的行标识属性。
语法
IDENTITY [ ( seed , increment ) ]
参数
seed
装载到表中的第一个行所使用的值。
increment
增量值,该值被添加到前一个已装载的行的标识值上。
必须同时指定种子和增量,或者二者都不指定。如果二者都未指定,则取默认值 (1,1)。
注释
如果在经常进行删除操作的表中存在着标识列,那么在标识值之间可能会产生差距。如果这构成了问题,那么请不要使用 IDENTITY 属性。但是,为了确保未产生差距,或者为了弥补现有的差距,在用 SET IDENTITY_INSERT ON 显式地输入标识值之前,请先对现有的标识值进行计算。
如果重新使用已删除的标识值,那么请使用示例 B 中的示例代码进行检查,以获得下一个可用的标识值。请用您的表名、标识列数据类型以及(该数据类型的)最大可允许值的数值 –1 替换 tablename、column_type 和 max(column_type) – 1。
使用 DBCC CHECKIDENT 检查当前的标识值,并将其与标识列中的最大值进行比较。
当将 IDENTITY 属性与 CREATE TABLE 一起使用时,Microsoft® SQL Server™ 使用 CREATE TABLE 的 NOT FOR REPLICATION 选项替代标识列的自动增加。通常,SQL Server 给插入表中的每个新行指派一个值,该值比前面的最高值要大出某些增量。但是,如果新行是由另一个数据源复制过来的,那么标识值必须保持与其在数据源中完全相同。
示例
A. 将 IDENTITY 属性与 CREATE TABLE 一起使用
下面的示例创建一个新表,该表将 IDENTITY 属性用于获得自动增加的标识号。
USE pubs
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'new_employees')
DROP TABLE new_employees
GO
CREATE TABLE new_employees
(
id_num int IDENTITY(1,1),
fname varchar (20),
minit char(1),
lname varchar(30)
)
char(13) 是换行 char(10)是回车
update 表名 set 字段名=replace(字段名,char(13),'')
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流