2010-12-18 83 views
1

我創建中,我檢索例如如下:當我給單引號的時候需要把空間在數據庫領域的動態查詢其不接受
在動態查詢SQL添加空間

DECLARE @QUERY VARCHAR(8000)
SET @QUERY='SELECT DATENAME(MM,getdate())+RIGHT(CONVERT(VARCHAR(20),getdate(),107),9)+SUBSTRING(CONVERT (VARCHAR(20),getdate(),100),12,6) + ' '+ RIGHT(CONVERT(VARCHAR(20),getdate(),100),2) AS CurrentDate'
EXECUTE (@QUERY)

的目的是把一個空間之間HH:MM和AM/PM

回答

3

了雙引號

DECLARE @QUERY VARCHAR(8000) 
SET @QUERY='SELECT DATENAME(MM,getdate())+RIGHT(CONVERT(VARCHAR(20),getdate(),107),9)+SUBSTRING(CONVERT (VARCHAR(20),getdate(),100),12,6) + '' ''+ RIGHT(CONVERT(VARCHAR(20),getdate(),100),2) AS CurrentDate' 
EXECUTE (@QUERY) 

但爲什麼這是動態的?就在行

SELECT 
    DATENAME(MM,getdate())+ 
    RIGHT(CONVERT(VARCHAR(20),getdate(),107),9)+ 
    SUBSTRING(CONVERT (VARCHAR(20),getdate(),100),12,6) + 
    ' '+ 
    RIGHT(CONVERT(VARCHAR(20),getdate(),100),2) AS CurrentDate 

或者在客戶端代碼格式運行...

+2

並考慮將其標記爲已回答你問題 – 2010-12-18 06:15:15

2

試試這個:

DECLARE @QUERY VARCHAR(8000) 
    SET @QUERY='SELECT DATENAME(MM,getdate()) 
+RIGHT(CONVERT(VARCHAR(20),getdate(),107),9) 
+SUBSTRING(CONVERT (VARCHAR(20),getdate(),100),12,6) 
+ '' '' 
+ RIGHT(CONVERT(VARCHAR(20),getdate(),100),2) AS CurrentDate' 
    EXECUTE (@QUERY) 

逃脫單引號,用他們兩個彼此相鄰。

+0

@FilipScript謝謝你的回覆它在sql服務器上工作,但是當我使用datatable調用它時,它變爲null。我只是把它寫成一個程序。 – 2010-12-18 06:30:58

+0

@FilpScript對不起,這不是代碼錯誤實際上,我的長度的varchar是問題時,我增加了它開始執行的好長度。非常感謝你的幫助。 – 2010-12-18 06:37:31

0

另一種方法來增加了一倍引號(假定爲動態SQL需要的是真正的),就是簡單地使用CHAR(32)

DECLARE @QUERY VARCHAR(8000) 
    SET @QUERY='SELECT DATENAME(MM,getdate()) 
+RIGHT(CONVERT(VARCHAR(20),getdate(),107),9) 
+SUBSTRING(CONVERT (VARCHAR(20),getdate(),100),12,6) 
+ Char(32) 
+ RIGHT(CONVERT(VARCHAR(20),getdate(),100),2) AS CurrentDate' 
    EXECUTE (@QUERY) 
+0

絕對正確無誤,但是當您經常在MS-SQLServer和Oracle之間切換時,會有點煩。後者調用相同的功能CHR。 '''適用於兩者,並且更具可讀性。 – 2010-12-18 07:25:17