如何在 SQL 查询语句中使用文字反斜杠?
How to use literal backslash in SQL query statement?
EDIT2:对不起大家,问题已解决。我正在尝试将一个数字与我的字符串连接起来。我忘记了我在此处发布时简化了我的陈述,认为我的问题与反斜杠有关,而不是类型兼容性。你们是对的,我是个白痴。谢谢!
我正在使用 Access 2013
,我的查询从 SQL 10.0 服务器(使用直通)提取数据。
我正尝试在我的 SQL 查询中使用反斜杠,如下所示(***edit:tbltask.jobnum 是我数据库中的一个字符串):
SELECT [tblEstimator].[Name] + '\20' + [tbltask].[JobNum] + ' JOBS\' AS JobMidFilePath
但是当我 运行 查询时,我得到错误:
Conversion failed when converting the varchar value '\20' to data type smallint. (#245)
我不知道这意味着什么,也不知道它为什么要尝试将任何内容转换为 smallint。
首先,您可以尝试 cast/convert 您的 int,因为您的输出应该是字符串。如果单引号不起作用,您可以尝试使用双引号 (")
SELECT [tblEstimator].[Name] + "\20" + CAST([tbltask].[JobNum] as varchar(100)) + " JOBS\" AS JobMidFilePath
要重现您的问题,我们可以编写如下查询:
declare @name varchar(50) = 'Test',
@JobNum smallint = 12
select @name + '\20' + @JobNum + ' JOBS\';
这将 return 同样的错误:
Conversion failed when converting the varchar value 'Test' to data
type 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
是否等效,但这应该可以解决您的问题。
/*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. ;)
*/
EDIT2:对不起大家,问题已解决。我正在尝试将一个数字与我的字符串连接起来。我忘记了我在此处发布时简化了我的陈述,认为我的问题与反斜杠有关,而不是类型兼容性。你们是对的,我是个白痴。谢谢!
我正在使用 Access 2013
,我的查询从 SQL 10.0 服务器(使用直通)提取数据。
我正尝试在我的 SQL 查询中使用反斜杠,如下所示(***edit:tbltask.jobnum 是我数据库中的一个字符串):
SELECT [tblEstimator].[Name] + '\20' + [tbltask].[JobNum] + ' JOBS\' AS JobMidFilePath
但是当我 运行 查询时,我得到错误:
Conversion failed when converting the varchar value '\20' to data type smallint. (#245)
我不知道这意味着什么,也不知道它为什么要尝试将任何内容转换为 smallint。
首先,您可以尝试 cast/convert 您的 int,因为您的输出应该是字符串。如果单引号不起作用,您可以尝试使用双引号 (")
SELECT [tblEstimator].[Name] + "\20" + CAST([tbltask].[JobNum] as varchar(100)) + " JOBS\" AS JobMidFilePath
要重现您的问题,我们可以编写如下查询:
declare @name varchar(50) = 'Test',
@JobNum smallint = 12
select @name + '\20' + @JobNum + ' JOBS\';
这将 return 同样的错误:
Conversion failed when converting the varchar value 'Test' to data type 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
是否等效,但这应该可以解决您的问题。
/*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. ;)
*/