expiredDate nvarchar()列包含類似22-12-2022 00:00:00和空的資料。
SELECT ISNULL(CONVERT(Date, expiredDate), '')
FROM tablename
null 的結果是默認日期1900-01-01- 我希望它為空白或為空。
隨著列被轉換為日期時間,null 被轉換為默認日期。所需日期應為 yyyy-MM-dd 格式,null 為空
uj5u.com熱心網友回復:
您可以CONVERT在原始日期上使用此處生成字串,然后將COALESCE空值丟失為空字串:
SELECT expiredDate,
COALESCE(CONVERT(varchar(10), expiredDate, 120), '') AS expiredDateText
FROM yourTable;
uj5u.com熱心網友回復:
您可以嘗試以下查詢。
select case when ISDATE(expiredDate) = 0 then '' else convert(varchar,convert(date,expiredDate)) end as YourColumnName
ISDATE() 函式檢查輸入資料是否為有效日期。這也包括 NULL。如果資料不是日期,它將回傳零 (0)。
如果您的文化是 en-us,那么默認情況下您將獲得 YYYY-MM-DD 格式的日期。您還可以使用 SQL Server 中的 Format 函式以您期望的格式獲取日期。
有關格式功能的更多資訊可以在下面的鏈接中找到。
https://docs.microsoft.com/en-us/sql/t-sql/functions/format-transact-sql?view=sql-server-ver15
uj5u.com熱心網友回復:
您偶然發現了 SQL Server 中的一個奇怪(煩人的)怪癖,其中空白字串在轉換為 DATE 時變為 1900-01-01。您的 CONVERT() 將列型別設定為 DATE,然后當您執行 ISNULL 時,它會將空字串隱式轉換為 DATE。為什么它回傳 1900-01-01 而不是錯誤,我不知道
空字串到日期奇怪行為的示例
SELECT CAST('' AS DATE)
--Returns 1900-01-01
決議日期以更正 DATE 資料型別,然后格式化
我建議首先將您的 NVARCHAR 列轉換為正確的 DATE 資料型別。使用 TRY_CAST 允許任何無效日期不會導致整個查詢失敗,而是回傳 NULL。FORMAT() 然后允許您隨意格式化 DATE,并且 ISNULL 會將 NULL 更改為空字串
DECLARE @YourTable TABLE (ID INT IDENTITY(1,1),expiredDate nvarchar(20))
INSERT INTO @YourTable
VALUES ('22-12-2022 00:00:00'),('31-12-2022 00:00:00'),('02-02-2022 00:00:00'),(NULL)
,('40-02-2022 00:00:00') /*Bad date for testing purposes*/
SELECT *,FormattedExpiredDate = ISNULL(FORMAT(B.ExpiredDateWithCorrectDateType,'yyyy-MM-dd'),'')
FROM @YourTable AS A
/*Format to YYYY-MM-DD (culture agnostic date format) and then use TRY_CAST(). If date is invalid, will return NULL*/
CROSS APPLY (SELECT ExpiredDateWithCorrectDateType = TRY_CAST(SUBSTRING(expiredDate,7,4) SUBSTRING(expiredDate,4,2) SUBSTRING(expiredDate,1,2) AS DATE)) AS B
結果:
| ID | 過期日期 | ExpiredDateWithCorrectDateType | 格式化過期日期 |
|---|---|---|---|
| 1 | 22-12-2022 00:00:00 | 2022-12-22 | 2022-12-22 |
| 2 | 31-12-2022 00:00:00 | 2022-12-31 | 2022-12-31 |
| 3 | 02-02-2022 00:00:00 | 2022-02-02 | 2022-02-02 |
| 4 | 空值 | 空值 | |
| 5 | 40-02-2022 00:00:00 | 空值 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/460695.html
下一篇:向資料添加最大值和大小寫?
