我想从日期列中等于特定日期的表格中选择我以格式' yyyy-mm-dd'格式发送的特定日期。我需要转换该字符串,而不是比较我的表中是否有该日期。
现在我这样做:
select *
FROM table
where CONVERT(char(10), date_column,126) = convert(char(10), '2016-10-28', 126)
date_column是表格中的日期类型,我需要以这种格式从表格中获取' yyyy-mm-dd'因为我使用126格式。我只是不确定我转换已经采用该格式的字符串的其他部分,我是否需要转换它,因为我不知道使用它是否合适:
CONVERT(varchar(10), date_column,126) = '2016-10-28'
答案 0 :(得分:7)
您也不需要转换列。实际上,最好不要转换列,因为在列上使用函数可以防止sql server使用任何可能有助于该列上的查询计划的索引。 此外,您正在将字符串转换为char(10) - 最好将其转换为日期:
where date_column = convert(date, '2016-10-28', 126)
另外,如果您使用的是日期时间数据类型而不是日期,则需要检查日期时间值是否在您传递到下一个日期的日期之间。
答案 1 :(得分:2)
你不需要这样做。 yyyy-MM-dd
是默认格式。
请注意,如果date_column
中有时间戳,您还需要考虑时间。在这种情况下,你应该写这样的东西
... WHERE date_column >= '2016-10-28 00:00:00' AND date_column < '2016-10-29 00:00:00'
<击> ...在哪里date_column BETWEEN&#39; 2016-10-28 00:00:00&#39;和&#39; 2016-10-29 00:00:00&#39; 击>
正如我刚刚了解到的那样(除了我的想法)BETWEEN
实际上包含了结束时间戳,因此不等同于上述>= ... <
方法。
这也应该正确使用索引。
答案 2 :(得分:2)
您可以使用CONVERT()函数将字符串转换为日期,方法是给出输入参数的特定格式
declare @date date
set @date = CONVERT(date, '2016-10-28', 126)
select @date
您可以在此处找到SQL Convert date function
的可能格式参数值