顯然不是最有效的,我知道,但蠻力它...
order by substring(@theStr, len(@theStr) - 4 + 1, 4)
+ substring(@thestr, charindex('-',@Thestr)+1,1)
+ right('00' + substring(@thestr, 1, charindex('-',@Thestr)-1),2)
這裏是如何通過作品去那裏:
declare @thestr varchar(255) = '9-4-2018'
Declare @SortStr as Varchar(255)
--year
Select @SortStr = substring(@theStr, len(@theStr) - 4 + 1, 4)
print @Sortstr
--day
Select @SortStr = right('00' + substring(@thestr, 1, charindex('-',@Thestr)-1),2)
print @sortStr
--week
Select @SortStr = substring(@thestr, charindex('-',@Thestr)+1,1)
print @sortStr
Select @SortStr = substring(@theStr, len(@theStr) - 4 + 1, 4)
+ substring(@thestr, charindex('-',@Thestr)+1,1)
+ right('00' + substring(@thestr, 1, charindex('-',@Thestr)-1),2)
會產生此輸出
2018
09
4
2018409
所以,如果這裏真正需要的是排序(而不是轉換爲日期),然後將該字符串重新格式化爲'YYYY-MM-W#',這將允許您按照字典順序進行排序並獲取您的預期的結果。那就是我專注於時間的地方。 – JNevill
@JNevill偉大的建議,謝謝。 T-SQL中的語法是什麼? –
除此之外:您可能需要使用適當的數據類型向表中添加_persisted計算列_ '日期',以保持價值。它也可以被索引。這應該讓桌子變得更容易。 – HABO