Sql server 在SQL Server中使用子字符串时的转换问题
我试图根据某些条件(检查字段末尾是否有.pdf)使用同一数据表中的其他列值更新列值。在更新列值时,我必须删除.pdf,然后使用SUBSTRING()为其赋值Sql server 在SQL Server中使用子字符串时的转换问题,sql-server,substring,Sql Server,Substring,我试图根据某些条件(检查字段末尾是否有.pdf)使用同一数据表中的其他列值更新列值。在更新列值时,我必须删除.pdf,然后使用SUBSTRING()为其赋值 Update Table_name Set col_1 = SUBSTRING(col_2, 1, LEN(col_2 - 4)) Where col_2 like '%.pdf%' 但我犯了个错误 将nvarchar value default.pdf转换为数据类型int时,转换失败 注意:col_1和col_2都属于nvarchar(
Update Table_name
Set col_1 = SUBSTRING(col_2, 1, LEN(col_2 - 4))
Where col_2 like '%.pdf%'
但我犯了个错误
将nvarchar value default.pdf转换为数据类型int时,转换失败
注意:
col_1
和col_2
都属于nvarchar(255)
类型,您的LEN计算有语法错误LEN(col_2-4)
而不是LEN(col_2-4)
:
SQL正在尝试将col_2转换为INT,以便在应用LEN函数之前首先计算col_2-4。首先,获取LEN(col_2),它返回一个INT,然后减去2
解决方案:
更新表\u名称
设置列1=子串(列2,1,列(列2)-4)
其中col_2喜欢“%.pdf%”
您的LEN计算有语法错误LEN(col_2-4)
而不是LEN(col_2-4)
:
SQL正在尝试将col_2转换为INT,以便在应用LEN函数之前首先计算col_2-4。首先,获取LEN(col_2),它返回一个INT,然后减去2
解决方案:
更新表\u名称
设置列1=子串(列2,1,列(列2)-4)
其中col_2喜欢“%.pdf%”
尽管您的代码有一个小的语法错误。应该是
SUBSTRING(col_2,1,LEN(col_2)-4)
要更新的列的值
您也可以使用如下所示的charindex()
和Reverse()
函数来尝试此操作
create table MyTable
(
col_1 nvarchar(255)
, col_2 nvarchar(255)
)
insert into MyTable values
(null, 'ABC.pdf'),(null, 'MNO.pdf'),(null, 'PQR.pdf')
select * from MyTable
UPDATE MyTable
SET col_1 = left([col_2], len([col_2]) - charindex('.', Reverse([col_2])))
WHERE col_2 LIKE '%.pdf%'
select * from MyTable
实时演示。尽管您的代码有一个小的语法错误。应该是
SUBSTRING(col_2,1,LEN(col_2)-4)
要更新的列的值
您也可以使用如下所示的charindex()
和Reverse()
函数来尝试此操作
create table MyTable
(
col_1 nvarchar(255)
, col_2 nvarchar(255)
)
insert into MyTable values
(null, 'ABC.pdf'),(null, 'MNO.pdf'),(null, 'PQR.pdf')
select * from MyTable
UPDATE MyTable
SET col_1 = left([col_2], len([col_2]) - charindex('.', Reverse([col_2])))
WHERE col_2 LIKE '%.pdf%'
select * from MyTable
现场演示。我尝试了转换和转换子字符串(),但同样的问题为什么要在列中的任何位置搜索“.pdf”。您的逻辑基于字符串以.pdf结尾的假设,因此请确保您的语句一致!想想看!您应该有
where col_2 like N“%.pdf”代码>您的列是否为nvarchar?然后使用unicode文本。我尝试转换和转换子字符串(),但同样的问题为什么要在列中的任何位置搜索“.pdf”。您的逻辑基于字符串以.pdf结尾的假设,因此请确保您的语句一致!想想看!您应该有where col_2 like N“%.pdf”代码>您的列是否为nvarchar?然后使用unicode文本。