2014-10-08 75 views
0

我想找到那个样子SQLite的查询剥离一些文字

Transfer to CHK 9071 Confirmation# 1904952784

(不管多少)的所有记录,并去掉了“确认#”的一部分;所以上面将成为

Transfer to CHK 9071

我试过,但有语法错误:

update ZUSERPAYEE set ZNAME = left (ZNAME,length(ZNAME) - 24) where ZNAME like "%Confirmation# __________";

+0

它适用于我。 (MySQL的5.6.16)结果:“转移至CHK 9071”空白结尾。 – David 2014-10-08 01:18:31

回答

1

单引号这应该是因为这一点更可靠不要求确认号码是固定长度。还有LIKE的单引号。

update ZUSERPAYEE 
set ZNAME = INSTR(ZNAME, 'Confirmation#') - 1) 
where ZNAME like '%Confirmation# %' 
+0

我试过了,但得到了'错误:近“(”:语法error' ......也许是因为我使用'sqlite3'从OSX命令行...也许它不支持完整的功能集MySQL的 – 2014-10-08 01:32:51

+0

的我更新了声明。我离开的第二个参数CHARINDEX。 – 2014-10-08 01:36:20

+0

更改CHARINDEX来定位。格式相同,只是CHARINDEX是SQL Server。 – 2014-10-08 01:50:51

1

我建议您检出SUBSTRING_INDEX函数。 (我知道,在MySQL的使用,约SqlLite3不知道)

例如

SUBSTRING_INDEX('Transfer to CHK 9071 Confirmation# 1904952784',' Confirmation#',1) 

(这个例子假设总有前确认#空间,你想要的空间移除。)

如果你只是想剪掉开始在“确认#”,省略了空间字符:

SUBSTRING_INDEX('Transfer to CHK 9071 Confirmation# 1904952784','Confirmation#',1) 

对于给出的例子,这将留下尾随空格。尾部空格可以通过将该表达式包装在一个

TRIM(TRAILING ' ' FROM expr) 
+0

不错,但'错误:没有这样的函数:SUBSTRING_INDEX' :-( – 2014-10-08 02:31:03