sql sever 表內資料修改(含判斷)
舉例:
1、修改時間,將時間的時分改為0
2、判斷時間是上午下午
程式碼
UPDATE PA_Visit_Info
SET Visit_Date = STUFF(CONVERT(VARCHAR(23),Visit_Date,120), 12, 5, '00:00'),
Date_APM = CASE when DATENAME(HOUR, Visit_Date)<12 THEN '上午' ELSE '下午' END
資料表圖
額外補充:
時間格式化
<code>
SELECT CONVERT(varchar(100), GETDATE(), 0) 05 9 2011 9:12AM
SELECT CONVERT(varchar(100), GETDATE(), 1) 05/09/11
SELECT CONVERT(varchar(100), GETDATE(), 2) 11.05.09
SELECT CONVERT(varchar(100), GETDATE(), 3) 09/05/11
SELECT CONVERT(varchar(100), GETDATE(), 4) 09.05.11
SELECT CONVERT(varchar(100), GETDATE(), 5) 09-05-11
SELECT CONVERT(varchar(100), GETDATE(), 6) 09 05 11
SELECT CONVERT(varchar(100), GETDATE(), 7) 05 09, 11
SELECT CONVERT(varchar(100), GETDATE(), 8) 09:13:14
SELECT CONVERT(varchar(100), GETDATE(), 9) 05 9 2011 9:13:14:670AM
SELECT CONVERT(varchar(100), GETDATE(), 10) 05-09-11
SELECT CONVERT(varchar(100), GETDATE(), 11) 11/05/09
SELECT CONVERT(varchar(100), GETDATE(), 12) 110509
SELECT CONVERT(varchar(100), GETDATE(), 13) 09 05 2011 09:13:14:670
SELECT CONVERT(varchar(100), GETDATE(), 14) 09:13:14:670
SELECT CONVERT(varchar(100), GETDATE(), 20) 2011-05-09 09:13:14
SELECT CONVERT(varchar(100), GETDATE(), 21) 2011-05-09 09:13:14.670
SELECT CONVERT(varchar(100), GETDATE(), 22) 05/09/11 9:15:33 AM
SELECT CONVERT(varchar(100), GETDATE(), 23) 2011-05-09
SELECT CONVERT(varchar(100), GETDATE(), 24) 09:15:33
SELECT CONVERT(varchar(100), GETDATE(), 25) 2011-05-09 09:15:33.140
SELECT CONVERT(varchar(100), GETDATE(), 100) 05 9 2011 9:15AM
SELECT CONVERT(varchar(100), GETDATE(), 101) 05/09/2011
SELECT CONVERT(varchar(100), GETDATE(), 102) 2011.05.09
SELECT CONVERT(varchar(100), GETDATE(), 103) 09/05/2011
SELECT CONVERT(varchar(100), GETDATE(), 104) 09.05.2011
SELECT CONVERT(varchar(100), GETDATE(), 105) 09-05-2011
SELECT CONVERT(varchar(100), GETDATE(), 106) 09 05 2011
SELECT CONVERT(varchar(100), GETDATE(), 107) 05 09, 2011
SELECT CONVERT(varchar(100), GETDATE(), 108) 09:16:38
SELECT CONVERT(varchar(100), GETDATE(), 109) 05 9 2011 9:16:38:543AM
SELECT CONVERT(varchar(100), GETDATE(), 110) 05-09-2011
SELECT CONVERT(varchar(100), GETDATE(), 111) 2011/05/09
SELECT CONVERT(varchar(100), GETDATE(), 112) 20110509
SELECT CONVERT(varchar(100), GETDATE(), 113) 09 05 2011 09:17:19:857
SELECT CONVERT(varchar(100), GETDATE(), 114) 09:17:19:857
SELECT CONVERT(varchar(100), GETDATE(), 120) 2011-05-09 09:17:19
SELECT CONVERT(varchar(100), GETDATE(), 121) 2011-05-09 09:17:19.857
SELECT CONVERT(varchar(100), GETDATE(), 126) 2011-05-09T09:17:19.857
SELECT CONVERT(varchar(100), GETDATE(), 130) 6 ????? ??????? 1432 9:17:19:857AM
SELECT CONVERT(varchar(100), GETDATE(), 131) 6/06/1432 9:17:19:857AM
</code>
其他常用函式方法:
SubString():用於擷取指定字串的方法。該方法有三個引數:
引數1:用於指定要操作的字串。
引數2:用於指定要擷取的字串的起始位置,起始值為 1 。
引數3:用於指定要擷取的長度。
select substring('abcdef',1,3) -- 返回 abc
select substring('123456321',0,2) -- 返回 1,即第一位,最好不要這樣做
Left():用於返回指定字串中指定長度的左側部分。該方法有兩個引數:
引數1:用於指定要操作的字串。
引數2:用於指定要返回的子字串的長度。
select LEFT('abc123',3) -- 返回 abc
select LEFT('左側部分右側部分',4) -- 返回 左側部分
Right():用於返回指定字串中指定長度的右側部分。該方法有兩個引數:
引數1:用於指定要操作的字串。
引數2:用於指定要返回的子字串的長度。
select RIGHT('abc123',3) -- 返回 123
select RIGHT('左側部分右側部分',4) -- 返回 右側部分
CharIndex():用於返回指定字串中指定子字串出現的起始位置。如果未找到就返回 0。該方法有兩個引數:
引數1:用於指定要進行查詢的字串。
引數2:用於指定用作檢索的字串。
select charindex('a','123a123') -- 返回 4
select charindex('abc','123a123') -- 返回 0
select charindex('abc','123abc123') -- 返回 4
Stuff():用於刪除指定長度的字元,並在刪除的位置插入新的字元/值。該方法有四個引數:
引數1:用於指定要操作的字串。
引數2:用於指定要刪除字元的起始位置。
引數3:用於指定要刪除字元的長度。
引數4:用於指定在刪除的位置插入的新的字串/值。
select stuff('123abc456',4,3,'ABC') -- 返回 123ABC456
select stuff('123abc456',1,3,'') -- 返回 abc456,用空字串替代
Len():用於返回指定文字的值的長度。前導空格計算在內,尾隨空格不計算在內。該方法有一個引數:
引數1:用於指定要操作的文字或字串。
select len('123') -- 返回 3
select len('字串') -- 返回 3
Difference():用於返回一個整數值,指示兩個字元表示式的 SOUNDEX 值之間的差異。(即兩個字串的相似度)那麼什麼是 SOUNDEX 值呢?先記著,下面輪到它了。
返回的值從 0 到 4 不等:0 表示幾乎不同或完全不同,4 表示幾乎相同或完全相同。該方法有兩個引數:
引數1:用於指定要進行比對的第一個字串 SOUNDEX 值 。
引數2:用於指定要進行比對的第二個字串 SOUNDEX 值。
select difference('action','demo') -- 返回 2
select difference('123456','整數') -- 返回 4
Soundex():用於返回指定字串的 SOUNDEX 值。SOUNDEX是一種語音演算法,利用英文字的讀音計算近似值,值由四個字元構成,第一個字元為英文字母,後三個為數字。在拼音文字中有時會有會念但不能拼出正確字的情形,可用 Soundex 做類似模糊匹配的效果。這裡的模糊匹配跟 LIKE 不同。
演算法簡要說明:
-- 將英文字按以下規則替換(不使用第一個字元進行匹配,並且不使用對應值為 0 的英文字元的值)
a e h i o u w y -> 0
b f p v -> 1
c g j k q s x z -> 2
d t -> 3
l -> 4
m n -> 5
r -> 6
如果字串中存在擁有相同對應數字的2個或以上的字母在一起(例如 j 和 k),則刪除其他的,只保留1個。去除對應值為 0 的字元,只返回前4個位元組,不夠用 0 填充。
select soundex('string') -- 返回 S215
select soundex('str') -- 返回 S210
select soundex('123') -- 返回 0000
select soundex('字串') -- 返回 0000
PS:除英文字元以外的字元都將返回 0000,所以上面的方法 Difference() 的第二個示例會返回4(表示完全相同)。
Lower():用於返回指定英文字串的小寫形式的字串。如果不為英文字串,則返回原值。該方法有一個引數:
引數1:用於指定要轉換為小寫形式的字串。
select lower('ABC') -- 返回 abc
select lower('123') -- 返回 123
Upper():用於返回指定英文字串的大寫形式的字串。如果不為英文字串,則返回原值。該方法有一個引數:
引數1:用於指定要轉換為大寫形式的字串。
select upper('abc') -- 返回 ABC
select upper('123') -- 返回 123
Ltrim():用於返回刪除前導空格之後的字串。該方法有一個引數:
引數1:用於指定要進行刪除前導空格操作的字串。
select ltrim(' 123') -- 返回 123
select ltrim(' 好多空格') -- 返回 好多空格
select len(' 123') -- 返回 11
select len(ltrim(' 123')) -- 返回 3
Rtrim():用於返回截斷尾隨空格之後的字串。該方法有一個引數:
引數1:用於指定要進行截斷尾隨空格操作的字串。
select rtrim('123 ') -- 返回 123
select len(rtrim('123 ')) -- 返回 3
Replace():用第三個表示式替換第一個字串表示式中出現的所有第二個給定字串表示式。該方法有三個引數:
引數1:用於指定要操作的字串,即被匹配的字串。
引數2:用於指定要進行匹配的字串。
引數3:用於指定用作替換存在的匹配項的字串。
--把 abc 替換為 xxx
select replace('123abc456','abc','xxx') -- 返回 123xxx456
-- 用空字串替換匹配項
select replace('123abc456','abc','') -- 返回 123456
Unicode():根據 Unicode 標準返回指定字元或字串的第一個字元的整數值。該方法有一個引數:
引數1:用於指定要操作的字元或字串。
select unicode('a') -- 返回 97
select unicode('abc') -- 返回 97,只返回第一個字元
NChar():根據 Unicode 標準返回指定整數值程式碼的 Unicode 字元。該方法有一個引數:
引數1:指定一個 Unicode 標準的整數值程式碼。
select nchar(97) -- 返回 a
select nchar(65) -- 返回 A
Char():將指定的 int 型別的值轉換為 ASCII 程式碼。該方法有一個引數:
引數1:指定一個 int 型別的數值,值範圍為 0 至 255。返回 null 表示整數表示式不是在此範圍內。
select char(99) -- 返回 c
select char(9) -- Tab符
select char(10) -- 換行符
select char(13) -- 回車符
ASCII():返回指定字元或字串的第一個字元的 ASCII 程式碼值。該方法有一個引數:
引數1:用於指定要操作的字元或字串。
select ascii('A') -- 返回 65
select ascii('a') -- 返回 97
PS:ASCII() 用於操作單位元組,雙位元組請使用 Unicode()。全形字元為雙位元組、中文字元為雙位元組。
示例:
select unicode('字串') -- 返回 23383
select nchar('23383') -- 返回 字
select char('23383') -- 返回 NULL
select ascii('字串') -- 返回 215
select nchar('215') -- 返回 ×
select char('215') -- 返回 NULL
select ascii('Kan') -- 返回 75
select nchar('75') -- 返回 K
select char('75') -- 返回 K
Str():返回一個指定數值的等效字串。該方法有三個引數:
引數1:指定要操作的數值。
引數2:指定要返回字串的長度。預設值為10,即不指定預設長度為10,不足用空字元填充。
引數3:要返回的小數位數。預設值為0,即不指定就不保留小數,不足指定位數,用0補充。
select str(123.10) -- 返回 123
select len(str(123.10)) -- 返回 10
select str(123.10,5) -- 返回 123
select len(str(123.10,5)) -- 返回 5
select str(123.10,20,5) -- 返回 123.10000
select len(str(123.10,20,5)) -- 返回 20
Space():用於返回指定數值長度的空格字串。該方法有一個引數:
引數1:指定返回空格字串的長度。
select '1'+space(3)+'2' -- 返回 1 2
select len('1'+space(3)+'2') -- 返回 5
Reverse():用於對指定字串進行反轉,按照單個字元進行反轉。該方法有一個引數:
引數1:指定需要執行反轉操作的字串。
select reverse('123') -- 返回 321
select reverse('abc') -- 返回 cba
Replicate():用於返回一個對指定字串重複指定次數後的字串。該方法有兩個引數:
引數1:用於指定要操作的字串。
引數2:用於指定字串重複的次數。如果為0,返回空字串;如果為負數,則返回 null。
select replicate('123',3) -- 返回 123123123
select replicate('a',3) -- 返回 aaa
Quotename():返回一個 Unicode 字串,根據指定分隔符,返回一個有效的字串識別符號。該方法有兩個引數:
引數1:用於指定要操作的字串。
引數2:用於指定分隔符,可以是單引號(')、左括號([)、右括號(])、左右括號([])或雙引號(")。如果未指定,預設使用左右括號。
select quotename('123','[]') -- 返回 [123]
select quotename('123','''') -- 返回 '123'
select quotename('123','"') -- 返回 "123"
select quotename('12[]3','[]') -- 返回 [12[]]3],右括號加倍表示轉義字元。
Patindex():返回指定字串表示式中指定模式第一次出現的起始位置,未找到則返回0。該方法有兩個引數:
引數1:指定要匹配的字串及匹配模式。
引數2:指定要被匹配的字串表示式。
select Patindex('abc','123abc456abc789') -- 返回 0
select Patindex('abc','abc') -- 返回 1
select Patindex('abc%','123abc456abc789') -- 返回 0
select Patindex('%abc%','123abc456abc789') -- 返回 4
select Patindex('%[abc]%','123abc456abc789') -- 匹配字串 abc 第一次出現的位置,返回 4
select Patindex('%[^abc]%','123abc456abc789') -- 匹配不等於字元 a、b、c 的其他字元第一次出現的位置,返回 1
select Patindex('%[^abc]%','b123abc456abc789') -- 匹配不等於字元 a、b、c 的其他字元第一次出現的位置,返回 2
Parsename():返回物件名稱的指定部分。 可檢索的物件部分包括物件名稱、所有者名稱、資料庫名稱和伺服器名稱。其實也可以用於擷取字串。該方法有兩個引數:
引數1:要檢索其指定部分的物件的名稱。此名稱可包含四部分:伺服器名稱、資料庫名稱、所有者名稱以及物件名稱。
引數2:要返回的物件部分。只能為1至4的數值。1 = 物件名稱;2 = 架構名稱;3 = 資料庫名稱;4 = 伺服器名稱
select parsename('server.dbo.dbTest.table',1) tablename,
parsename('server.dbo.dbTest.table',2) dbname,
parsename('server.dbo.dbTest.table',3) schemaname,
parsename('server.dbo.dbTest.table',4) servername
這種擷取方式類似於字串分割,不過這裡是倒著擷取的,所以在一定程度上可以用於字串的擷取。不過只支援小數點(.)的分割,而且只支援四位。
select parsename('192.168.1.1',4) col1,
parsename('192.168.1.1',3) col2,
parsename('192.168.1.1',2) col3,
parsename('192.168.1.1',1) col4
Getdate():獲取當前日期時間。
select getdate()
Year():獲取指定日期表示式的年。該方法有一個引數:
引數1:指定要操作的日期表示式。
select year('2016-01-01') -- 返回 2016
select year('2017-01-01 12:30:30') -- 返回 2017
select year(getdate()) -- 返回 2017
Month():獲取指定日期表示式的月。該方法有一個引數:
引數1:指定要操作的日期表示式。
select month('2016-01-01') -- 返回 1
select month('2017-10-01 12:30:30') -- 返回 10
select month(getdate()) -- 返回 5
Day():獲取指定日期表示式的日。該方法有一個引數:
引數1:指定要操作的日期表示式。
select day('2016-01-01') -- 返回 1
select day('2017-10-03 12:30:30') -- 返回 3
select day(getdate()) -- 返回 11
Isdate():用於判斷指定的字串表示式是否為日期。返回 1,表示指定字串表示式是日期。返回 0,表示指定字串表示式不是日期。該方法有一個引數:
引數1:用於指定要操作的字串表示式。
select isdate('10/30/2017') -- 月/日/年 返回 1
select isdate('30/10/2017') -- 日/月/年 返回 0
select isdate('2017/10/30') -- 年/月/日 返回 1
select isdate('02/29/2017') --用於判斷閏年,由於2017不是閏年,所以沒有29 返回 0
select isdate('2017-01-01') -- 返回 1
select isdate('2017-01-01 10:10:10') -- 返回 1
select isdate('01-01-2017') -- 返回 1
select isdate('01-01-2017 10:10:10') -- 返回 1
Datename():返回指定日期的指定日期的部分的字串。該方法有兩個引數:
引數1:指定返回指定日期的指定部分的字串。可以為下圖中的日期部分或者縮寫。
引數2:指定要操作的日期字串。
select datename(year,'2017-01-01 10:10:10') -- 返回 2017
select datename(yyyy,'2017-01-01 10:10:10') -- 返回 2017
select datename(month,'2017-01-01 10:10:10') -- 返回 01
select datename(mm,'2017-01-01 10:10:10') -- 返回 01
select datename(quarter,'2017-05-02 10:10:10') -- 表示一年的第幾個季度 返回 2
select datename(weekday,'2017-02-02 10:10:10') -- 表示一週的星期幾 返回 星期四
select datename(week,'2017-02-02 10:10:10') -- 表示一年的第幾周 返回 5
select datename(dayofyear,'2017-02-02 10:10:10') -- 表示一年的第幾天 返回 33
select datename(hh,'2017-01-01 10:30:25') -- 返回 10
Datepart():返回指定日期的指定日期的部分的整數。Datepart() 方法和 Datename() 的方法使用方式類似,只不過 Datename() 方法返回的是一個字串,而 Datepart() 方法返回的是一個整數數值。該方法有兩個引數:
引數1:指定返回指定日期的指定部分的字串。可以為上圖中的日期部分或者縮寫。
引數2:指定要操作的日期字串。
select datepart(year,'2017-01-01 10:10:10') -- 返回 2017
select datepart(yyyy,'2017-01-01 10:10:10') -- 返回 2017
select datepart(month,'2017-01-01 10:10:10') -- 返回 1
select datepart(mm,'2017-01-01 10:10:10') -- 返回 1
select datepart(quarter,'2017-05-02 10:10:10') -- 表示一年的第幾個季度 返回 2
select datepart(weekday,'2017-02-02 10:10:10') -- 表示一週的星期幾,即一週的第幾天,星期日為一週的第一天 返回 5
select datepart(week,'2017-02-02 10:10:10') -- 表示一年的第幾周 返回 5
select datepart(dayofyear,'2017-02-02 10:10:10') -- 表示一年的第幾天 返回 33
select datepart(hh,'2017-01-01 10:30:25') -- 返回 10
Coalesce():返回所有引數中的第一個非空(not null)表示式。該方法最多可以有 n 個引數,但是最少要有兩個引數。
SELECT COALESCE('abc','') -- 返回 abc
SELECT COALESCE(NULL,'') -- 返回 空字串
SELECT COALESCE(null,null,'123','abc') -- 返回 123
PS:這個函式是返回第一個非空的值,所以引數裡面必須最少有一個非空的值。
ISNull():判斷指定的表示式一是否為空(null),如果為空則返回表示式二的值,否則返回表示式一的值,類似於C#中的三元運算子。該方法有兩個引數:
引數1:指定要操作的表示式一。
引數2:指定要操作的表示式二。
select isnull('','123') -- 返回 空字串
select isnull(null,'123') -- 返回 123
select isnull('123','abc') -- 返回 123
select isnull(null,null) -- 返回 null
其他方法函式轉載來自:https://www.cnblogs.com/Brambling/p/6779434.html