Sql 今天查找员工的生日

Sql 今天查找员工的生日,sql,sql-server,Sql,Sql Server,我试图在SQL中运行一个查询,它会告诉我谁的生日是今天,但表中的date字段是一个类似“20101231”的字符串值。我尝试通过使用子字符串将其转换为类似于12/31/2010的格式,但它仍然是一个字符串值,我无法使用where子句 我使用了以下建议的查询,但它仅在列设置为日期字段时有效 SELECT NAME, DOB FROM TABLE WHERE DAY(DOB) = DAY(GETDATE()) AND MONTH(DOB) = MONTH(GETDATE()) 如果日期是y

我试图在SQL中运行一个查询,它会告诉我谁的生日是今天,但表中的date字段是一个类似“20101231”的字符串值。我尝试通过使用子字符串将其转换为类似于12/31/2010的格式,但它仍然是一个字符串值,我无法使用where子句

我使用了以下建议的查询,但它仅在列设置为日期字段时有效

SELECT NAME, DOB
FROM TABLE
WHERE DAY(DOB) = DAY(GETDATE())
    AND MONTH(DOB) = MONTH(GETDATE())

如果日期是yyyymmdd格式的字符串,请执行以下操作:

where right(replace( convert(char(10), getDate(), 102), '.', ''), 4) = right(dob, 4)

如果日期是yyyymmdd格式的字符串,请执行以下操作:

where right(replace( convert(char(10), getDate(), 102), '.', ''), 4) = right(dob, 4)

你的方法基本上是可行的。最简单的方法是使用
FORMAT()

我还应该注意,您可以通过创建一个带有索引的计算列来加速此过程:

alter table t add dob_mmdd as (right(DOB, 4));

create index idx_t_dob_mmdd on t(dob_mmdd, DOB, Name);
然后在查询中使用:

SELECT NAME, DOB
FROM TABLE
WHERE dob_mmdd = FORMAT(GETDATE(), 'MMdd');

你的方法基本上是可行的。最简单的方法是使用
FORMAT()

我还应该注意,您可以通过创建一个带有索引的计算列来加速此过程:

alter table t add dob_mmdd as (right(DOB, 4));

create index idx_t_dob_mmdd on t(dob_mmdd, DOB, Name);
然后在查询中使用:

SELECT NAME, DOB
FROM TABLE
WHERE dob_mmdd = FORMAT(GETDATE(), 'MMdd');

这是哪个版本的SQL?MySQL、SQL Server、Oracle等等?Microsoft SQL Server
'YYYYMMDD'
是SQL Server中日期的正确字符串格式<代码>日期数据类型将是正确的数据类型。我强烈建议编写一个脚本,读取所有的DOB值,解析字符串值,并将其写入新的日期列,以便查询能够正常工作。将日期保留为字符串没有多大意义。好了,没有好的直接函数来转换字段,你能告诉我如何提取今天的生日吗?这是哪个版本的SQL?MySQL、SQL Server、Oracle等等?Microsoft SQL Server
'YYYYMMDD'
是SQL Server中日期的正确字符串格式<代码>日期数据类型将是正确的数据类型。我强烈建议编写一个脚本,读取所有的DOB值,解析字符串值,并将其写入新的日期列,以便查询能够正常工作。将日期保留为字符串没有多大意义。好了,没有好的直接函数来转换字段,你能告诉我如何提取今天的生日吗?你的查询很好,但不幸的是我无法更改表。谢谢你的帮助。你的查询很好,但不幸的是我无法更改表。谢谢你的帮助。