SQLite中如何将员工生日转换为当月第一天的日期?
解决SQLite中获取员工生日所在月份第一天的问题
你的问题出在对SQLite日期函数的用法理解上:
- 原代码中
DATE(STRFTIME('%m'), 'start of month')只提取了月份,缺少年份信息,SQLite无法将单独的月份解析为有效日期,因此返回默认的-4713-12-01。 - 尝试的
DATE(STRFTIME('%Y-%m'), 'start of month')返回Null,是因为STRFTIME('%Y-%m')生成的YYYY-MM格式不是DATE函数能直接处理的完整日期字符串。
下面是两种正确的实现方式:
方法一:直接用STRFTIME拼接目标格式
直接提取生日的年份和月份,拼接-01得到当月第一天:
SELECT FirstName || ' ' || LastName AS [Full Name], STRFTIME('%Y-%m-%d', BirthDate) AS [Birthday No Timecode], STRFTIME('%Y-%m-01', BirthDate) AS [Celebrated on] FROM employees;
方法二:用DATE函数的start of month修饰符
利用DATE函数的内置修饰符,直接将生日日期转换为当月第一天:
SELECT FirstName || ' ' || LastName AS [Full Name], STRFTIME('%Y-%m-%d', BirthDate) AS [Birthday No Timecode], DATE(BirthDate, 'start of month') AS [Celebrated on] FROM employees;
两种方法都能正确返回年-月-01格式的结果,比如对于Andrew Adams的生日1962-02-18,会返回1962-02-01。
内容的提问来源于stack exchange,提问作者MarkS
相关产品推荐
相关产品推荐

