代码之家  ›  专栏  ›  技术社区  ›  Mike

如何在SQL查询语句中使用反斜杠?

  •  1
  • Mike  · 技术社区  · 9 年前

    编辑2:对不起,各位,问题解决了。我试图用字符串连接一个数字。我忘记了我在这里发布时简化了我的声明,认为我的问题与反斜杠有关,而不是类型兼容性。你们是对的,我是个白痴。谢谢

    我正在使用 Access 2013 其中我的查询从SQL 10.0服务器中提取数据(使用传递)。

    我试图在SQL查询中使用反斜杠,如下所示(***编辑:tbltask.jobnum是数据库中的字符串):

    SELECT [tblEstimator].[Name] + '\\20' + [tbltask].[JobNum] + ' JOBS\\' AS JobMidFilePath
    

    但是当我运行查询时,我得到了错误:

    将varchar值“\\20”转换为数据类型smallint时,转换失败。(#245)

    我不知道这意味着什么,也不知道为什么要将任何东西转换为smallint。

    3 回复  |  直到 9 年前
        1
  •  2
  •   FutbolFan    9 年前

    为了复制您的问题,我们可以编写如下查询:

    declare @name varchar(50) = 'Test',
            @JobNum smallint = 12
    
    select @name + '\\20' + @JobNum + ' JOBS\\'; 
    

    这将返回相同的错误:

    将varchar值“Test\20”转换为数据时转换失败 键入smallint。

    但如果您将 smallint 或者将数字字段设置为这样的字符串,错误应该消失:

    declare @name varchar(50) = 'Test',
            @JobNum smallint = 12
    
    select @name + '\\20' + cast(@JobNum as varchar(10)) + ' JOBS\\'
    

    您的查询应该如下所示:

    SELECT [tblEstimator].[Name] + '\\20' + cast([tbltask].[JobNum] as varchar(10)) 
           + ' JOBS\\' AS JobMidFilePath
    

    我不确定 MS-ACESS 但这应该能解决你的问题。

        2
  •  1
  •   FutbolFan    9 年前
    /*You can copy/paste directly into SQL, comments will be commented out ini SQL syntax
    I would create a temp table to achieve this. */
    
    USE whateverDB
    GO
    
    CREATE TABLE #toSelectFrom (
        Name VARCHAR (100) 
        ,JobNum TINYINT
        /*look at the schema, it'll tell you what the data type is in SQL tables, in the column folder [see image] (http://i.ytimg.com/vi/MKPtdjq3MzA/maxresdefault.jpg) - copy verbatim to your temp table columns */
        ,slashPathNumber VARCHAR (25)
        ,slashPathJobs VARCHAR (50)
    )
    
    INSERT INTO #toSelectFrom (Name, slashPathNumber, JobNum, slashPathJobs)
    SELECT [tblEstimator].[Name], '\\\\20', [tbltask].[JobNum], ' JOBS\\' AS JobMidFilePath /*** FROM yourTableToSelectFrom -- you NEED THIS FOR VALID SQL! ***/ 
    
    --Then just: 
    SELECT * FROM #toSelectFrom;
    -- OR Alternatively:
    SELECT Name + slashPathNumber + JobNum + slashPathJobs AS JobMidFilePath FROM #toSelectFrom;
    
    /*
    If you use it a lot, just write the above select statement(s) into a view to select from more often. ;)
    */
    
        3
  •  1
  •   SlickTrick    9 年前

    首先,可以尝试强制转换/转换int,因为输出应该是字符串。如果单引号不起作用,可以尝试使用双引号(“)

    SELECT [tblEstimator].[Name] + "\\20" + CAST([tbltask].[JobNum] as varchar(100)) + " JOBS\\" AS JobMidFilePath