【问题标题】:How to get correct date part from variable sql如何从变量 sql 中获取正确的日期部分
【发布时间】:2014-09-26 19:05:39
【问题描述】:

需要从日期变量中获取年、月和日部分。当触发以下查询时,它给出的日期为 8,月份为 4

declare @date1 datetime
set @date1='04/08/2014'
        ------'dd/mm/yyyy' 

--select @date1,year(@date1) year1,month(convert(@date1,datetime)) month1,day(@date1) day1
select   YEAR(CONVERT(DATETIME,@date1)) YEAR1,
            MONTH(CONVERT(DATETIME,@date1)) MOTNH1,
            DAY(CONVERT(DATETIME,@date1)) DAY1
FROM            Tab1

【问题讨论】:

  • 最好使用yyyyMMdd,如果您可以控制格式,SQL 服务器将始终明确解释。如果可能的话,最好只使用 datetime 值并避免考虑任何字符串形式。
  • 但是,我需要遵循英国日期格式 dd/mm/yy

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2000


【解决方案1】:

检查 this 了解 DateTime 可能的格式

declare @date1 datetime
set @date1=CONVERT(DATETIME,'04/08/2014',103)

SELECT  YEAR(@date1) YEAR1,
        MONTH(@date1) MOTNH1,
        DAY(@date1) DAY1

记下dd/MM/yyyydd/MM/yy 不同。第一个需要103作为格式开关,后者需要3

【讨论】:

  • 仍然给出月份为 4
  • 检查我的编辑。这是因为您将变量声明为 DateTime 并直接应用该值。如果你用 103 格式转换字符串表示,你会得到正确的日期。
  • CONVERTs 中的 SELECT 查询毫无意义 - @date1 在这一点上已经是 DATETIME,因此它们变为无操作。
  • @Damien_The_Unbeliever 如此真实。我离开了它们,因为最初我认为 var 是 varchar,但是是的,它们毫无意义,因为它是日期时间。
  • 另外,在 SQL Server 中,获取变量值时不需要FROM 子句:Select Year(@date1) Year1, Month(@date1) month1, Day(@date1) day1 即可。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多