2010-12-18 88 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