Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用日期格式的varchar字段?_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

Sql 如何使用日期格式的varchar字段?

Sql 如何使用日期格式的varchar字段?,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一张桌子,上面有一堆包含生日的记录。 因此,该字段是一个varchar,每条记录的格式为yyyy/mm/dd(例如:1903/11/27) 识别生日在1月1日至10日之间的记录的最佳方法是什么 我目前的思路是使用正确的函数,将dd和mm值捕获到新temp表中两个单独的列中。完成后,我将使用“和”来获取所需的记录 因此,大致如下: SELECT * from BIRTHDAYS where (DateBday >= 1 AND DateBday < 11) and (MonthBd

我有一张桌子,上面有一堆包含生日的记录。 因此,该字段是一个
varchar
,每条记录的格式为yyyy/mm/dd(例如:1903/11/27)

识别生日在1月1日至10日之间的记录的最佳方法是什么

我目前的思路是使用正确的函数,将dd和mm值捕获到新temp表中两个单独的列中。完成后,我将使用“和”来获取所需的记录

因此,大致如下:

SELECT * from BIRTHDAYS where (DateBday >= 1 AND DateBday < 11) and (MonthBday = 1)
从生日中选择*,其中(DateBday>=1,DateBday<11)和(MonthBday=1)

有更简单的方法吗?

您可以将它们转换为
DateTime
类型,然后在
之间使用

 Where CONVERT(DATE, BirthDayField) BETWEEN STARTDATE AND ENDDATE
您可以使用:

SELECT *
FROM Birthdays
WHERE CONVERT(DATE, bDayField) BETWEEN '2011/1/1' AND '2011/1/10'
(我使用
bDayField
作为当前
varchar
字段的名称,该字段以文本形式包含生日)

这将
varchar
字段转换为日期,您可以使用
BETWEEN
运算符。这是一个漂亮、干净的
WHERE
子句,我想=)


注意:您确实应该为此列使用适当的
Date
DateTime
DateTime2
数据类型。现在改变它可能是最简单的——它可以在将来为你省去一些麻烦。

谢谢@jadarnel27。但是我需要寻找记录,不管他们是哪一年出生的。但是是的,我确实把事情弄得太复杂了。转换它似乎是最简单的解决方案。将列转换为
DATETIME
——毕竟,如果它是日期——为什么不将其存储在适当的数据类型中??搜索是否需要跨月?这对于您当前的设置来说是个问题(我想)。嗯,我不是DBA,所以在这种情况下这不是一个选项。但我确实移动到一个临时表中,然后以适当的格式存储它。然后,我使用DATEPART函数只获取我要查找的记录的月份和日期(因为我不想要年份)。仅供其他人参考,一旦我使用了DATEPART函数,我就能够使用原始问题中概述的查询,即基于确切月份和日期的查询。日期部分(T-SQL msn参考):