sqlserver中的isnull跟oracle中的nvl相似。
成都創(chuàng)新互聯(lián)主營古藺網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,成都App制作,古藺h5重慶小程序開發(fā)公司搭建,古藺網(wǎng)站營銷推廣歡迎古藺等地區(qū)企業(yè)咨詢
ISNULL
使用指定的替換值替換 NULL。
語法
ISNULL ( check_expression , replacement_value )
參數(shù)
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 是字符替換函數(shù),作用是將一個字段中指定的字符串換成其他的字符串
例 select replace(p_fwzz,'A','F') from dual 含義就是只要p_fwzz字段中的數(shù)據(jù)含字符A,則把A都換成F
剩下就是最麻煩的單引號了
因為單引號是關鍵字符號,所以要在數(shù)據(jù)中操作單引號要注意
舉個例子:
需要顯示結果A
select 'A' from dual,ok沒問題
需要顯示結果為'
如果寫成select ''' from dual就是錯的,必須寫成select '''' from dual才行
所以select ''''||','||'''' from dual 的輸出結果是','
關鍵的字符和函數(shù)我已經(jīng)解釋了完了,至于你寫的那個語句是什么意思你可自行按我說的方式研究一下,我就不告訴你了,這樣才能學到東西
順便說一下,你的sql語句有問題 dual 是oracle的虛擬表,是沒有實際字段的,所以replace(p_fwzz,',',''''||','||'''')這段是沒意義滴!
有辦法的,不過要慎用
先為表1增加兩個字段,一個是begin_name 一個是end_name
然后update這兩個字段
替換為第三個字段里的前4位和后4位,用substr函數(shù)
再然后拼接一下字符串替換一下
最后把新增的兩個字段弄掉
----------------補充-------------
具體步驟
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和字段名換成你自己數(shù)據(jù)庫里的不就行了嗎
如果保險一點的話最好加一個條件限制,就是where name like '%武漢生物',這樣替換的都是以“武漢生物”結尾的行
Transact-SQL 參考
IDENTITY(屬性)
在表中創(chuàng)建一個標識列。該屬性與 CREATE TABLE 及 ALTER TABLE Transact-SQL 語句一起使用。
說明 IDENTITY 屬性與 SQL-DMO Identity 屬性不同,后者表現(xiàn)列的行標識屬性。
語法
IDENTITY [ ( seed , increment ) ]
參數(shù)
seed
裝載到表中的第一個行所使用的值。
increment
增量值,該值被添加到前一個已裝載的行的標識值上。
必須同時指定種子和增量,或者二者都不指定。如果二者都未指定,則取默認值 (1,1)。
注釋
如果在經(jīng)常進行刪除操作的表中存在著標識列,那么在標識值之間可能會產(chǎn)生差距。如果這構成了問題,那么請不要使用 IDENTITY 屬性。但是,為了確保未產(chǎn)生差距,或者為了彌補現(xiàn)有的差距,在用 SET IDENTITY_INSERT ON 顯式地輸入標識值之前,請先對現(xiàn)有的標識值進行計算。
如果重新使用已刪除的標識值,那么請使用示例 B 中的示例代碼進行檢查,以獲得下一個可用的標識值。請用您的表名、標識列數(shù)據(jù)類型以及(該數(shù)據(jù)類型的)最大可允許值的數(shù)值 –1 替換 tablename、column_type 和 max(column_type) – 1。
使用 DBCC CHECKIDENT 檢查當前的標識值,并將其與標識列中的最大值進行比較。
當將 IDENTITY 屬性與 CREATE TABLE 一起使用時,Microsoft? SQL Server? 使用 CREATE TABLE 的 NOT FOR REPLICATION 選項替代標識列的自動增加。通常,SQL Server 給插入表中的每個新行指派一個值,該值比前面的最高值要大出某些增量。但是,如果新行是由另一個數(shù)據(jù)源復制過來的,那么標識值必須保持與其在數(shù)據(jù)源中完全相同。
示例
A. 將 IDENTITY 屬性與 CREATE TABLE 一起使用
下面的示例創(chuàng)建一個新表,該表將 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),'')