[英]Specify string date format before casting in a function SQL
我有一種將字符串日期轉換為日期格式的方案。 但是日期字符串不是直接格式,因此轉換將引發錯誤。 所以我嘗試的是
set dateformat dmy
在sql中進行轉換之前,它沒有任何問題。
但是麻煩是我需要在視圖或函數中實現它。 但是令人失望的部分,函數或視圖不支持將setdateformat表示為副作用運算符
那么在轉換為函數或視圖之前,如何指定給定字符串的日期格式?
正如Damien在對問題的評論中所寫的那樣,理想情況下,首先您不應該弄亂日期時間的字符串表示形式-您應該使用適當的數據類型-並且由於您詢問創建視圖的原因,因此只能表示您的數據庫中有一個以字符串形式存儲的datetime值。
解決此問題的方法是更改存儲此值的方式-將DateTime2
用作日期時間值,將Date
用作僅日期值,或將Time
用作一天中的時間值。
進一步閱讀-亞倫·伯特蘭德的不良習慣:選擇錯誤的數據類型
假設您無法更改數據庫設計,請閱讀此答案的其余部分。
您不能在視圖或函數上使用set dateformat
,但可以使用convert
而不是cast
將datetime
值的字符串表示形式更改為實際datetime
值,前提是該字符串表示形式具有受支持的日期格式之一 (其中有很多,因此通常不應該有問題)。
如果datetime
字符串表示形式是內置convert
功能不支持的格式,則可能需要以字符串操作的形式進行一些額外的工作,以將其更改為支持的格式,或者(大小寫),將字符串表示形式分成幾部分,然后使用datetimefromparts.
如果您可以使用datetime
格式的字符串表示形式提供您正在使用的實際格式,我可能可以編輯此答案以確切地向您展示如何執行此操作。
SELECT CONVERT(varchar(10),CAST('07/01/2018' AS DATE),23)
結果
2018-07-01
不知道您的意思是“日期字符串不是直接格式”。 例子會有所幫助。 您是否嘗試過解析而不是強制轉換?
SELECT
TRY_PARSE(thedate AS datetime) as justParse
,TRY_PARSE(thedate AS datetime USING 'en-US') as parseUS
,TRY_PARSE(thedate AS datetime USING 'en-GB') as parseGB
,try_cast(thedate as date) as tryCast
FROM (values
('07/01/2018')
,('01/07/2018')
,('07 jan 2018')
,('jan 07 2018')
,('Monday, 7 January 2019')
)d(thedate)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.