-2

好的,这就是我将日期保留为字符串的愚蠢方式

23.12.2012 21:24:31

现在在一个选择查询中,我想将它们转换为 BigInt 并进行搜索

casted version : "20121223212431"

像下面

select * from myTable where cast(datestring as bigint) > 20111223212431 

我如何在 sql server 上将这种字符串转换为 BigInt ?

编辑 - 为什么这个查询不起作用

    select (convert(datetime,LastMoveTime,104)) as myTime from myTable
where myTime < DATEADD(day,-366,GETDATE())

错误:列名“myTime”无效。

4

2 回答 2

5

首先,最好只修复要使用的架构DATETIME

如果你不能这样做,你可以使用一个CONVERT表达式来转换DATETIME。你只需要找到正确的格式。(如果您的字符串值尚未采用受支持的格式,您可能需要做一些工作......)毕竟,这就是值 - 为什么要使用 BigInt 呢

请注意,如果您更正架构以使用适当的数据类型,则它可能比必须在整个地方进行转换更有效例如,字符串列上的索引对这种查询没有多大帮助,而如果您可以将其更改为索引DATETIME值,则索引可以完成大部分工作。

于 2012-12-24T15:08:18.023 回答
1

您不应该这样做,请参阅 John Skeet 的帖子,但是

declare @dt datetime
select @dt='20121223 21:24:31'

Select Cast(Convert(Varchar(25),@dt,112)+Replace(Convert(Varchar(25),@dt,108),':','') as BigInt)
于 2012-12-24T15:20:01.627 回答