转换字符串' yyyy-mm-dd'至今

时间:2016-11-02 07:50:05

标签: sql sql-server sql-server-2012

我想从日期列中等于特定日期的表格中选择我以格式' 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'

3 个答案:

答案 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

的可能格式参数值