显然不是最有效的,我知道,但蛮力它...
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