如果某个人的出生日期有3列(例如:BirthMonth
,BirthDay
,BirthYear
),那么将它们合并到一起的最佳方法是什么一列格式为MM/dd/yy
且(显然)为date
数据类型?谢谢。
答案 0 :(得分:2)
只需将所有3列合并到YYYY-MM-DD
,然后将此字符串转换为Datetime
。
例如:
Select
cast(cast(Year as string) + '-' +
cast(Month as string) + '-' +
cast(Day as string) as datetime)
现在您可以将其格式化为任何日期格式。
答案 1 :(得分:1)
你说“......把它们放在一个格式为MM / dd / yy并且(显然)是日期数据类型的字段中?”但是日期类型没有显示格式。这是一个表达问题。
SQL Server 2012起:
DATEFROMPARTS(year, month, day)
或
cast((DATEFROMPARTS(year, month, day) as date)
转换为纯日期并删除默认时间部分
e.g。
SELECT DATEFROMPARTS(2010, 12, 31) AS Result;
答案 2 :(得分:1)
对于SQL Server 2012,请使用Mitch建议的DATEFROMPARTS()
函数。对于以前的版本:
假设BirthMonth
,BirthDay
和BirthYear
都是整数值,您可以投射它们:
CAST(CAST(BirthYear AS varchar) + '-' + CAST(BirthMonth AS varchar) + '-' + CAST(BirthDay AS varchar) AS DATETIME)
或者,你可以这样做:
DATEADD(MONTH, BirthMonth - 1, DATEADD(YEAR, BirthYear - 1900, BirthDay - 1));
这样做的好处是不进行任何字符串转换,并且它不依赖于任何日期格式。这利用了SQL Server的日期内部表示是自1900年1月1日以来的天数这一事实。
如果BirthMonth
,BirthDay
和BirthYear
是有效的字符串值,那么您可以直接转换它们:
CAST(BirthYear + '-' + BirthMonth + '-' + BirthDay AS DATETIME)
如果他们保证月份和日期都有2位数(以及年份的4位或2位数),那么您可以使用更紧凑的方式投射它们而不使用连字符:
CAST(BirthYear + BirthMonth + BirthDay AS DATETIME)