我试图在SQL中运行查询,它会告诉我今天的生日是谁,但表中的日期字段是一个字符串值,如' 20101231'我尝试通过使用子字符串将其转换为12/31/2010来改变格式,但是再次它仍然是字符串值,我不能使用where子句。
我使用了以下建议的查询,但仅当列设置为日期字段时才有效。
SELECT NAME, DOB
FROM TABLE
WHERE DAY(DOB) = DAY(GETDATE())
AND MONTH(DOB) = MONTH(GETDATE())
答案 0 :(得分:0)
如果您的日期是yyyymmdd格式的字符串,请执行以下操作:
where right(replace( convert(char(10), getDate(), 102), '.', ''), 4) = right(dob, 4)
答案 1 :(得分:0)
你的方法基本上可行。最简单的是使用FORMAT()
:
SELECT NAME, DOB
FROM TABLE
WHERE RIGHT(DOB, 4) = FORMAT(GETDATE(), 'MMdd');
我还应该注意,您可以通过创建带索引的计算列来加快速度:
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');