人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

解析SQL Server中SQL日期轉(zhuǎn)換出錯的原因

發(fā)布日期:2021-12-10 02:40 | 文章來源:源碼之家

開發(fā)人員有時候使用類似下面SQL將字符串轉(zhuǎn)換為日期時間類型,乍一看,這樣的SQL的寫法是沒有什么問題的。但是這樣的SQL其實有時候就是一個定時炸彈,隨時可能出現(xiàn)問題(),下面簡單對這種情況進行一個簡單概括。

SELECT CONVERT(DATETIME, '2020-01-13 6:46:42');

如果你將連接數(shù)據(jù)庫的登錄名的默認語言修改為Aribc,然后去執(zhí)行上面SQL語句,就會遇到錯誤,為什么呢?

為什么上面SQL的日期轉(zhuǎn)換出錯了呢?其實是因為登錄名修改默認語言后,會話對應(yīng)的date_format變化了,從mdy變成了dmy,所以上面轉(zhuǎn)換就報錯了,有時候不報錯,但是可能轉(zhuǎn)換成一個錯誤日期,產(chǎn)生了邏輯錯誤,這個反而是一個跟糟糕的隱性錯誤。等你發(fā)現(xiàn)的時候,可能已經(jīng)產(chǎn)生大量錯誤數(shù)據(jù)了。

SELECT session_id
  ,program_name
  ,client_interface_name
  ,language
  ,date_format
FROM sys.dm_exec_sessions
WHERE session_id = 53;

關(guān)于不同語言的默認date_format,可以使用下面命令查看:

sp_helplanguage 'us_english'

另外一種情況,如果當前會話使用SET命令修改過DATEFORMAT,也會遇到這個錯誤,如下所示:

SET DATEFORMAT DMY;
GO
SELECT CONVERT(DATETIME, '2020-01-13 6:46:42');

這種情況就比較復(fù)雜了,有可能是某一段SQL里面設(shè)置了DATEFORMAT,導(dǎo)致整個會話后面的日期格式全部變化了。所以上面這種SQL的“健壯性”就比較差,在平時就要避免寫出這樣的SQL,如果你使用這樣的SQL,不管是會話的默認語言變化了,還是當前會話的DATEFORMAT變化了,都不會產(chǎn)生錯誤或邏輯錯誤。

SELECT CONVERT(DATETIME,'2020-01-13 6:46:42', 120)。

平時遇到這種日期轉(zhuǎn)換,就一定要明確指定轉(zhuǎn)換格式,讓其不要受會話的DATEFORMAT變化影響,書寫健壯、可靠的SQL語句,下面這兩個簡單SQL的細微差別,也可判別一個人是否用有書寫健壯性SQL的意識!

SELECT CONVERT(DATETIME, '2020-01-13 6:46:42');
SELECT CONVERT(DATETIME, '2020-01-13 6:46:42', 120)

總結(jié)

以上所述是小編給大家介紹的解析SQL Server中SQL日期轉(zhuǎn)換出錯的原因,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對本站網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部