3

基本上我在一个表中有 3 个单独的列。我会打电话给他们SMonth,,,SdaySyear由于某种原因,它们被存储为数值。我可以使用以下字符串将它们格式化为看起来像日期的格式,但不允许我使用诸如排序、排序依据、日期差异或日期添加之类的函数。

CAST(SMonth AS varchar(2)) + '/' + CAST(SDay varchar(2)) + '/' + CAST(SYear AS varchar(4))

任何人都知道如何在不更改表格的情况下将其转换为可行的日期?

只要我可以使用它,它看起来如何并不重要,即adatedatetime没有区别。

提前致谢。

4

2 回答 2

2

只需将您的结果转换为日期或日期时间。

DECLARE @SMonth AS INT = 12
DECLARE @SDay AS INT = 31
DECLARE @SYear as INT = 2013
SELECT CONVERT(DATE,CAST(@SMonth AS varchar(2)) + '/' + CAST(@SDay AS varchar(2)) + '/' + CAST(@SYear AS varchar(4)))
于 2013-08-15T15:35:34.383 回答
0

您应该将字符串转换为格式,yyyy/mm/dd以确保SQL Server使用ODBC canonical格式

SELECT CONVERT(date, CONVERT(varchar, Syear) + '/' + convert(VARCHAR, SMonth) + '/' + convert(VARCHAR, SDay ) )

否则,您的结果可能取决于默认值dateformat或有人使用 更改它SET DATEFORMAT,例如:

05/10/2013可能意味着

  • 2013 年 5 月 10 日,如果DATEFORMATU.S.
  • 2013 年 10 月 5 日,如果DATEFORMATBrithish / French

看到这个完整的参考dateformat

于 2013-08-15T16:11:50.460 回答