2015-02-08 167 views
2
SELECT 
    DateAdded, 
    Cast(DateAdded AS Date) AS DateAddedV1, 
    Cast(DateAdded AS Time) AS DateTime, 
    SELECT CAST(DateAdded AS Date(mm:dd) AS OrderDate 
FROM Products 

显示只月份和日期我与SQL初学者,我想作为OrderDate只月份和日返回DateAdded列,但我似乎无法得到语法对。我感谢任何人的协助。CAST函数从日期时间

+0

它应该是no通常情况下,你不应该格式化数据以便在数据库中显示。这是一个通常由应用程序处理的任务。这个问题听起来像是基于家庭作业,就业测试或醉酒的胆量。 – HABO 2015-02-08 04:31:25

+0

这看起来像我目前正在研究的作业问题(OregonTech CST324数据库类,从Murach的SQL Server 2012开发者手册开始工作):我写了除第4行外的所有行(甚至是同一列和表名!) ,这就是我所坚持的。我会使用CONVERT,但分配表示使用CAST。 – Azendale 2015-10-15 16:15:39

回答

3

使用DatePart功能从Datetime类型提取daymonth

Select Datepart(Month,DateAdded) AS [Month], -- Month(Dateadded) 
     Datepart(Day,DateAdded) as [Day], -- Day(Dateadded) 
     .. 
From Products 

更新:只有使用cast功能无法取出MonthDay。如果你想保持月份和日期在同一列

SELECT CONVERT(VARCHAR(2), Month(DateAdded)) + ':' 
      + CONVERT(VARCHAR(2), Day(DateAdded)) 
      ..... 

要把前导零的使用right功能,并从DateAdded提取Time使用Convert功能与108

SELECT right('0'+CONVERT(VARCHAR(2), Month(DateAdded)),2) + ':' 
     + right('0'+CONVERT(VARCHAR(2), Day(DateAdded)) ,2) as [Mon:Day], 
     convert(varchar(10),DateAdded,108) as [Time] 
     ......... 
+0

@ZackSpideyDavidson他们可能希望你使用'CAST(DateAdded as Date)' - 我不认为有一种方法可以使用'CAST'函数来删除年份。另外,使用'CAST'作为格式化工具是愚蠢的。 – Jeff 2015-02-08 03:08:56

0

相反的转换,如NoDisPlayName的答案,你可以使用RTRIM功能。

SELECT RIGHT('0' + RTRIM(MONTH(DateAdded)), 2)

2

我觉得我在做这个任务这学期。这是我结束了,因为它必须使用CAST函数来完成:

SELECT DateAdded, 
    CAST(DateAdded AS date) AS DateOnly, 
    CAST(DateAdded AS time) AS TimeOnly, 
    CAST(DateAdded AS varchar(6)) MonthDay 
FROM Products; 

这工作,因为VARCHAR总是有到下个月的前6个字符的一天。所有月份都是3个字符(1月,2月,3月,4月),然后是空格,然后是2位数的日期,或2个空格和1位数的日期。无论哪种方式,它总是加起来6个字符。

1

在此处询问日期/时间信息的可见格式。

  • 在MS SQL Server从SQ 2012,以后你可以用一个FORMAT() 功能。如果您使用支持此功能的版本,我建议您使用它。请注意,第二个参数是大小写敏感
  • 在所有的版本则可以使用CONVERT()功能,其具有 的语法如下:

CONVERT(DATA_TYPE [(长度)],表达[,风格])

注意在paticular是风格参数(整数),这是如果使用的CONVERT重要。对于使用的日期/时间信息是HERE和下方显示任一方法的一个非常有用的参考是一个很小的例子:

SQL Fiddle demo

查询1

SELECT 
     FORMAT(SYSDATETIME(), 'MMM dd yyyy') 
    , CONVERT(VARCHAR(11), SYSDATETIME(), 100) -- note length set to (11) 

Results

|-------------|-------------| 
| Oct 11 2015 | Oct 11 2015 |