今天找到员工的生日

时间:2017-02-22 18:23:04

标签: sql sql-server

我试图在SQL中运行查询,它会告诉我今天的生日是谁,但表中的日期字段是一个字符串值,如' 20101231'我尝试通过使用子字符串将其转换为12/31/2010来改变格式,但是再次它仍然是字符串值,我不能使用where子句。

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

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

2 个答案:

答案 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');