首页 > 解决方案 > 在 SQL Server 中使用子字符串时的转换问题

问题描述

我正在尝试根据某些条件使用同一数据表中的其他列值更新列值(检查字段末尾是否有 .pdf)。在更新列值时,我必须删除 .pdf 然后分配,因此使用 SUBSTRING() 相同。

Update Table_name
Set col_1 = SUBSTRING(col_2, 1, LEN(col_2 - 4))
Where col_2 like '%.pdf%'

但我得到一个错误

将 nvarchar 值 default.pdf 转换为数据类型 int 时转换失败

注意:col_1两者col_2都是类型nvarchar(255)

标签: sql-serversubstring

解决方案


您的 LEN 计算存在语法错误。LEN(col_2) - 4)而不是LEN(col_2 - 4)

SQL 正在尝试将 col_2 转换为 INT 以在应用 LEN 函数之前首先计算 col_2 - 4。首先,获取返回 INT 的 LEN(col_2),然后减去 2。

解决方案:

UPDATE Table_name
   SET col_1 = SUBSTRING(col_2, 1, LEN(col_2) - 4)
 WHERE col_2 LIKE '%.pdf%'

推荐阅读