SQLite中字符串连接不起作用

142

我正在尝试执行SQLite的替换函数,但是想要在函数中使用另一个字段。

select  locationname + '<p>' from location;
在这个片段中,结果是一个由0组成的列表。我原本期望得到的是一个字符串,其中包含来自locationname的文本和'<p>'文字字面量。
5个回答

274

尝试使用||替换+

select  locationname || '<p>' from location;

摘自SQLite文档

||运算符是“拼接”运算符 - 它将两个字符串操作数连接在一起。


32
如果field1或field2中有一个为null,则返回null。如果希望在其中一个或两个字段为null时得到响应,则可以使用ifnull(field1,'')||ifnull(field2,'')。然后你需要决定如果这两个字段都为null时要进行什么操作。 - Tom Cerul
6
@TomCerul 或使用 COALESCE(nullable_field, '') || COALESCE(another_nullable_field, '')。 (翻译:Use COALESCE(nullable_field, '') || COALESCE(another_nullable_field, '') instead, or @TomCerul) - zx8754
TomCerul的评论非常重要,值得重新编写或至少编辑正确答案。 - Pepik

42

||操作符在SQLite中表示字符串的连接。使用以下代码:

select  locationname || '<p>' from location;

11
双竖线也是连接字符串的ANSI方法,在Oracle和PostgreSQL中也受支持。 - OMG Ponies

37

对比一下,

SQLite                      ||  
Oracle                      CONCAT(string1, string2) 或 ||
MySQL                       CONCAT(string1, string2, string3...) 或启用 PIPES_AS_CONCAT 后使用 || 
Postgres                    CONCAT(string1, string2, string3...) 或 ||
Microsoft SQL Server 2012+  CONCAT(string1, string2, string3...) 或 + 
Microsoft Access            +  

2
从2012年开始,SQL Server也支持CONCAT(string1, string2, string3...) - Tim Cooke
2
如果启用了PIPES_AS_CONCAT模式,MySQL也支持|| - Paul Spiegel

2

如果你使用数据源设计器或向导在Visual Studio 2010中工作,而使用||运算符时出现问题了。那么可以在sqlite数据库中创建一个视图,并从该视图创建数据源。

另请参见此线程


0
SQLite 3.44.0及更高版本支持CONCAT函数:
concat(X,...) concat(...)函数返回一个字符串,该字符串是其所有非NULL参数的字符串表示形式的连接。如果所有参数都为NULL,则concat()返回一个空字符串。

查询:

SELECT CONCAT(locationname, '<p>') 
FROM location;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接