【问题标题】:SQL syntax error with substring and charindex子字符串和字符索引的 SQL 语法错误
【发布时间】:2020-07-20 19:06:56
【问题描述】:

我有这个脚本:

update edi_file_steps
  set
    user_id= table_B.id,
    message= SUBSTRING( message, 1, CHARINDEX('[',message)-1)
from edi_file_steps table_A INNER JOIN GU_User table_B
where message LIKE '%Downloaded%' 
  AND table_B.login = SUBSTRING( 
    message, 
    CHARINDEX('[', message) + 1, 
    len(message) - CHARINDEX('[',message)-1
  );

我在第 4 行遇到 sql 语法错误:意外令牌, 我的脚本有什么问题吗?sql

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 我正在使用名为 liquibase 的 java api 执行此脚本,应该是纯 sql 语法,以便与 mysql 或 hsqldb 等数据库一起使用 ...
  • 即使我尝试使用 mysql 数据库,我也收到语法错误

标签: mysql sql substring charindex


【解决方案1】:

如果您使用的是 SQL Server,则您的 JOIN 格式不正确。而且表别名很差。也许这可以满足您的要求:

update fs
    set user_id = u.id,
        message = SUBSTRING(fs.message, 1, CHARINDEX('[', fs.message)-1)
    from edi_file_steps fs INNER JOIN
         GU_User u
         on u.login = SUBSTRING(fs.message, CHARINDEX('[', fs.message)+1, len(fs.message)- CHARINDEX('[',fs.message)-1 )
    where message LIKE '%Downloaded%' ;

编辑:

在 MySQL 中,这将是:

update edi_file_steps fs INNER JOIN
       GU_User u
       on fs.message like concat('%[', u.login, ']%')
    set user_id = table_B.id,
        message = substring_index(fs.message, '[', 1)
    where message LIKE '%Downloaded%' ;

【讨论】:

  • 不起作用,这不适用于 liquibase java,我也尝试使用 mysql 数据库而不使用任何 api,我得到这个:你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的“from edi_file_steps fs INNER JOIN GU_User u on u.login = SUBSTRING(”附近使用正确的语法
  • 在所有情况下,我都会在 u.login = SUBSTRING ... 附近收到 sql 语法错误第 4 行...
  • @AymenRagoubi 。 . .如果您的基础数据库是 MySQL,为什么要使用 SQL Server 语法?我调整了答案。
  • 因为我使用的是一个java api LIQUIBASE,它确实像我的数据库的版本控制,所以它应该是一个纯sql,这样当我们改变我们的数据库时我们就不必接触代码。
  • 我知道,但我想要一个纯 sql 语法,你的第一个答案应该适用于 mysql,为什么我在 u.login=substring 附近出现语法错误...
猜你喜欢
  • 2021-11-10
  • 1970-01-01
  • 2019-06-03
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 1970-01-01
  • 2016-05-18
相关资源
最近更新 更多