Sql server 在SQL Server中使用子字符串时的转换问题

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(

我试图根据某些条件(检查字段末尾是否有.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(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文本。