2015-02-08 162 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 |