【问题标题】:converting datetime in varchar and using it in where clause in Sql server 2005在 varchar 中转换日期时间并在 Sql server 2005 的 where 子句中使用它
【发布时间】:2013-05-07 08:56:15
【问题描述】:

这是我正在处理的 sql 查询。它将过滤后的结果转储到临时表中 它给出了一个错误,指出“','附近的语法不正确。”

查询。

DECLARE @year VARCHAR(50)
SET @year = '2012'
SELECT 
              [DAGName]
              , CONVERT(DATETIME, convert(VARCHAR(10), [ReportDate], 103), 103) AS FilteredDate        
                      INTO TempData FROM MailboxDatabase
        WHERE (CONVERT(VARCHAR(10), [ReportDate], 103)
        IN ( '01/01/'+ @year +,'01/02/'+ @year +,
             '01/03/'+ @year +,'01/04/'+ @year +,
             '01/05/'+ @year +,'01/06/'+ @year +,
             '01/07/'+ @year +,'01/08/'+ @year +,
             '01/09/'+ @year +,'01/10/'+ @year +,
             '01/11/'+ @year +,'01/12/'+ @year +
            ))

错误出现在我试图通过将其转换为 varchar 来根据日期过滤结果的条件下。但它不工作。

【问题讨论】:

  • 为什么要指定 + 。删除它,你就可以开始了

标签: sql sql-server datetime varchar


【解决方案1】:

您以错误的方式连接字符串。

试试这个

'01/01/'+ @year ,'01/02/'+ @year ,

【讨论】:

  • 是的@ARS 这是我之前所做的动态查询,现在我已经删除了额外的 +... 它又解决了一个问题........
  • 我想从我正在制作的临时表中获取月份的名称,所以我尝试了这个 SELECT DATENAME(month, FilteredDate) AS 'Month Name' 它给出了语法错误....任何建议
  • 它应该可以工作。我觉得数据有问题。检查过滤日期列中的数据
【解决方案2】:
DECLARE @year VARCHAR(50)
SET @year = '2012'
SELECT 
              [DAGName]
              , CONVERT(DATETIME, convert(VARCHAR(10), [ReportDate], 103), 103) AS FilteredDate        
                      INTO TempData FROM MailboxDatabase
        WHERE (CONVERT(VARCHAR(10), [ReportDate], 103)
        IN ( '01/01/'+ @year ,'01/02/'+ @year,
             '01/03/'+ @year,'01/04/'+ @year,
             '01/05/'+ @year,'01/06/'+ @year,
             '01/07/'+ @year,'01/08/'+ @year,
             '01/09/'+ @year,'01/10/'+ @year,
             '01/11/'+ @year,'01/12/'+ @year
            ))

【讨论】:

    【解决方案3】:

    在 Microsoft SQL Server 中:

    --
    -- Create test case
    --
    DECLARE @myDateTime DATETIME
    SET @myDateTime = '2013-05-07'
    
    --
    -- Convert string
    --
    SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
    

    【讨论】:

    • 这不是我要找的,我希望在不考虑时间部分的情况下过滤掉 where 条件......
    • 对不起。这是我的错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多