【发布时间】:2016-08-26 14:23:43
【问题描述】:
我正在制作一份报告,显示部门当月的生日,出于某种原因,他们决定在表格中使用 VARCHAR(10) 作为员工的生日。
虽然我可以使用 VARCHAR 获取我需要的信息,但我无法在 Tableau 中按当前月份进行筛选,因为它无法将数据识别为实际日期。
所以我需要将使用 MMMDD 字符串的 VARCHAR(10) 转换为 SQL 中的 DATE。我知道如果没有年份,它永远不会是有效日期,但年份对我的报告并不重要,因此可以应用通用年份。
任何帮助都会很棒。 PeopleSoftData.birth_date 是 VARCHAR(10) 字段,数据字符串使用 MMMDD Ex:JAN18 没有一年,所以我在使用网站上预先存在的问答转换为 DATE 时遇到了麻烦。
SELECT
PeopleSoftData.fname+' '+PeopleSoftData.lname AS 'Full Name',
PeopleSoftData.fname AS 'First Name',
PeopleSoftData.lname AS 'Last Name',
PeopleSoftData.location AS 'Site',
PeopleSoftData.birth_date AS 'Birth Date', -- This field is VARCHAR(10) and the data string is using MMMDD Ex:JAN18 without a year
PeopleSoftData.orig_hire_date AS 'Hire Date',
PeopleSoftData.supervisor_name AS 'Supervisor'
FROM dbo.USC_StatsApp_Members MemberList
INNER JOIN dbo.USC_Reporting_PeopleSoft_Data PeopleSoftData ON (PeopleSoftData.empcontid = MemberList.empcontid)
WHERE
PeopleSoftData.termination_date IS NULL
AND PeopleSoftData.birth_date IS NOT NULL
AND MemberList.USC_Active = 1
AND DATEDIFF(wk,MemberList.Last_seen_PeopleSoft,current_timestamp) < 2
【问题讨论】:
-
别忘了将闰年作为通用年份。
-
为什么还需要将其转换为日期?你只是想改变显示格式吗?
-
对其执行日期函数....
-
@CharlesBretana 因为 OP 不关心年份,所以我很好奇哪些函数是相关的。
monthname()? -
我们使用 Tableau 来生成可视化报告,因为我需要在逻辑上按月份分隔生日,所以最好在 SQL 而不是 Tableau 中完成。我已经通知开发人员将该表转换为 DATETIME,因此我们不必这样做。
标签: sql date sql-server-2012 varchar