2012-12-20 66 views
3

我還想寫在SQL Server 2008 R2中的日期轉換爲字符串時,它是空的SQL查詢。例如...在SQL中,如何將日期字段轉換爲空字符串?

Date       ShipmentRef  RecieptNo 
    2009-01-01 03:12:11.596   DS298-YYY  18060 
            FM298-YYY  95464 
    2010-11-11 08:33:55.974   IL298-YYY  56703 
    2003-08-01 07:00:44.846   UI835-XYX  40264 
            US655-YXY  34643 
    2004-03-07 12:46:33.352   WE242-XXX  83755 

上述數據只是我當前數據的樣本表。當我運行SELECT查詢,我希望它返回數據如下:

Date       ShipmentRef  RecieptNo 
    2009-01-01 03:12:11.596   DS298-YYY  18060 
    InsertRandomStringHere   FM298-YYY  95464 
    2010-11-11 08:33:55.974   IL298-YYY  56703 
    2003-08-01 07:00:44.846   UI835-XYX  40264 
    InsertRandomStringHere   US655-YXY  34643 
    2004-03-07 12:46:33.352   WE242-XXX  83755 

我不知道這將是更好的,CASE或CONVERT。你給我的任何幫助將非常感激。

+2

您正在使用哪個數據庫管理系統? MS SQL,MySQL,Oracle,DB2,不管? – ppeterka

+0

SQL Server 2008 - 我的帖子現在已經被編輯來反映這一點。抱歉! –

回答

6

假設SQL-服務器:

SELECT ISNULL(CONVERT(nVarChar(30), Date, 121), 'InsertRandomStringHere') 

DEMO

CAST und CONVERT (Transact-SQL)

+0

1爲日期列轉換爲'varchar' – Andomar

+0

是,SQL服務器2008年。對不起 - 我將編輯我的消息指定。該查詢的哪一部分針對特定字段? –

+0

@Natalie:該字段被命名爲「日期」,不是嗎?當然,如果你想從表中選擇,你需要添加'From'子句。 –

4
COALESCE(datefield, 'InsertRandomStringHere') 

(儘管正如其他人指出的,對於某些DBMS,您可能需要執行其他類型轉換操作)。

+1

由於'datetime'的優先級高於'varchar',所以這會導致轉換錯誤。 F.E. '選擇COALESCE(CAST(null作爲日期時間), '嗨')' - >'轉換失敗時,轉換日期和/或時間,從字符string.' – Andomar

+0

@Andomar:不能在MySQL中:) – ysth

1

試試這個。這是w.r.to mysql的

select if(Date <> '',Date,'xxxxxxx'),ShipmentRef,RecieptNo from table 
+0

的IF語句需要AND和OR或者,所以這在我執行查詢之前出現了語法錯誤。 –

+0

@Natalie:在一些SQL香料,'IF(表達式,EXPR,表達式)'是短期的'CASE WHEN EXPR TRUE THEN ELSE EXPR EXPR END CASE' – ysth

1

這取決於正是你想要達到的目標。

在列中的每個值必須是同一類型(MS-SQL至少),所以在Date列中的所有值必須VARCHAR類型,如果你想在NULL日期的情況下,「」隨機字符串「」。

然後是這樣的:

SELECT CAST(COALESCE(GETDATE(), 'InsertRandomStringHere') AS VARCHAR) AS DATE 
UNION 
SELECT CAST(COALESCE(NULL, 'InsertRandomStringHere') AS VARCHAR) 

應該工作。

但是它可以使硬盤在您的應用程序來讀取Date列值上線的另一端(如果有一個應用程序)。

+0

似乎在SQL Server中不起作用。 –

+0

@SalmanA:「看起來不起作用」是什麼意思*?怎麼了? – ysth

+0

你看到什麼錯誤,薩爾曼? –

0
SELECT ISNULL(Date, 'InsertRandomStringHere') AS Date 
FROM Table 
+0

是第一個還是第二個'Date'字段名? –

+0

第一個參數是FieldName,第二個是如果字段日期爲空並且AS部分是結果查詢的列名的替代方案 –

+0

啊右,所以不應該是AS varchar? –

相關問題