主頁(yè) > 知識(shí)庫(kù) > 解析SQL Server中SQL日期轉(zhuǎn)換出錯(cuò)的原因

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

熱門(mén)標(biāo)簽:電銷(xiāo)機(jī)器人 深圳 南京電銷(xiāo)外呼系統(tǒng)哪家好 地圖標(biāo)注如何弄全套標(biāo) 股票配資電銷(xiāo)機(jī)器人 實(shí)體店地圖標(biāo)注怎么標(biāo) 外呼系統(tǒng)會(huì)封嗎 萬(wàn)利達(dá)綜合醫(yī)院地圖標(biāo)注點(diǎn) 武漢AI電銷(xiāo)機(jī)器人 在電子版地圖標(biāo)注要收費(fèi)嗎

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

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

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

為什么上面SQL的日期轉(zhuǎn)換出錯(cuò)了呢?其實(shí)是因?yàn)榈卿浢薷哪J(rèn)語(yǔ)言后,會(huì)話對(duì)應(yīng)的date_format變化了,從mdy變成了dmy,所以上面轉(zhuǎn)換就報(bào)錯(cuò)了,有時(shí)候不報(bào)錯(cuò),但是可能轉(zhuǎn)換成一個(gè)錯(cuò)誤日期,產(chǎn)生了邏輯錯(cuò)誤,這個(gè)反而是一個(gè)跟糟糕的隱性錯(cuò)誤。等你發(fā)現(xiàn)的時(shí)候,可能已經(jīng)產(chǎn)生大量錯(cuò)誤數(shù)據(jù)了。

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

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

sp_helplanguage 'us_english'

另外一種情況,如果當(dāng)前會(huì)話使用SET命令修改過(guò)DATEFORMAT,也會(huì)遇到這個(gè)錯(cuò)誤,如下所示:

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

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

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

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

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)換出錯(cuò)的原因,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

您可能感興趣的文章:
  • MySQL日期函數(shù)與日期轉(zhuǎn)換格式化函數(shù)大全
  • MySQL中日期和時(shí)間戳互相轉(zhuǎn)換的函數(shù)和方法
  • 分享Sql日期時(shí)間格式轉(zhuǎn)換
  • SQL SERVER 日期格式轉(zhuǎn)換詳解
  • SQLserver中用convert函數(shù)轉(zhuǎn)換日期格式的方法
  • PHP+Mysql日期時(shí)間如何轉(zhuǎn)換(UNIX時(shí)間戳和格式化日期)
  • SQL學(xué)習(xí)筆記七函數(shù) 數(shù)字,日期,類(lèi)型轉(zhuǎn)換,空值處理,case
  • mysql 日期和時(shí)間格式轉(zhuǎn)換實(shí)現(xiàn)語(yǔ)句
  • sql語(yǔ)句中如何將datetime格式的日期轉(zhuǎn)換為yy-mm-dd格式

標(biāo)簽:泰安 武威 廣東 安徽 汕頭 臺(tái)州 濟(jì)源 濟(jì)寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《解析SQL Server中SQL日期轉(zhuǎn)換出錯(cuò)的原因》,本文關(guān)鍵詞  解析,SQL,Server,中,日期,轉(zhuǎn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《解析SQL Server中SQL日期轉(zhuǎn)換出錯(cuò)的原因》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于解析SQL Server中SQL日期轉(zhuǎn)換出錯(cuò)的原因的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章