我正在嘗試將字串資料型別轉換為在月份和日期部分的字串中不包含 0 的日期,并且需要將其轉換為日期格式yyyy-MM-dd,任何單個數字都不會出現零
例如,日期以
162022 it should be (01-06-2022)
或者
762022 it should be (07-06-2022)
或者
1262022 it should be (12-06-2022)
如何使用派生列獲得正確的格式以將其轉換為日期資料型別?
uj5u.com熱心網友回復:
嘗試使用以下運算式:
LEN([StringColumn]) == 6 ? "0" LEFT([StringColumn],1) "-0" SUBSTRING([StringColumn],2,1) "-" RIGHT([StringColumn],4) :
LEN([StringColumn]) == 8 ? LEFT([StringColumn],2) "-" SUBSTRING([StringColumn],3,2) "-" RIGHT([StringColumn],4) :
LEN([StringColumn]) == 7 ?
(DT_I4)SUBSTRING([StringColumn],2,2) > 12 ? LEFT([StringColumn],2) "-0" SUBSTRING([StringColumn],3,1) "-" RIGHT([StringColumn],4) : "0" LEFT([StringColumn],1) "-" SUBSTRING([StringColumn],2,2) "-" RIGHT([StringColumn],4) : [StringColumn]
這個運算式邏輯可以總結為下表
| 輸入長度 | 日期格式 | 例子 | 如何轉換成日期 |
|---|---|---|---|
| 6 | dmyyyy |
162021 |
在第一位和第二位數字前加零 |
| 7 | dmmyyyy 或者 ddmyyyy |
1262021 或者 2122021 |
檢查第二個和第三個數字是否大于 12 然后考慮前兩個數字是當天的部分,否則只考慮當天的第一個數字 |
| 8 | ddmmyyyy |
01062021 |
沒做什么 |
| < 6 或 > 8 | ? | ? | 沒做什么 |
這個運算式是有效的,除了1112021那些不容易預測是日部分11還是月部分 us 的值11。
uj5u.com熱心網友回復:
您可以嘗試一種蠻力方法,但如下面的示例所示,可能有超過 1 個可能的日期。
這是一種有風險的格式,需要格外小心。
例子
Declare @YourTable Table ([SomeCol] int) Insert Into @YourTable Values
(162022)
,(7182022)
,(1262022)
,(12182022)
Set DateFormat MDY
Select SomeCol
,AsDate
,Cnt = sum(1) over (partition by [SomeCol])
From @YourTable A
Cross Apply ( values ( stuff(reverse(SomeCol),5,0,'-') ) ) B(rStr)
Cross Apply ( values ( stuff(rStr,7,0,'-') )
,( stuff(rStr,8,0,'-') )
,( stuff(rStr,9,0,'-') )
) C(tStr)
Cross Apply ( values ( try_convert(date,reverse(tStr)) ) ) D(AsDate)
Where AsDate is not null
結果
SomeCol AsDate Cnt
162022 2022-01-06 1
1262022 2022-01-26 2 <<< Two valid dates
1262022 2022-12-06 2 <<< Two valid dates
7182022 2022-07-18 1
12182022 2022-12-18 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/406365.html
標籤:
下一篇:中間沒有空格的文本框
