Sql 今天查找员工的生日
我试图在SQL中运行一个查询,它会告诉我谁的生日是今天,但表中的date字段是一个类似“20101231”的字符串值。我尝试通过使用子字符串将其转换为类似于12/31/2010的格式,但它仍然是一个字符串值,我无法使用where子句 我使用了以下建议的查询,但它仅在列设置为日期字段时有效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
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值,解析字符串值,并将其写入新的日期列,以便查询能够正常工作。将日期保留为字符串没有多大意义。好了,没有好的直接函数来转换字段,你能告诉我如何提取今天的生日吗?你的查询很好,但不幸的是我无法更改表。谢谢你的帮助。你的查询很好,但不幸的是我无法更改表。谢谢你的帮助。