Łączenie ciągów nie działa w SQLite

136

Próbuję wykonać funkcję zamiany SQlite, ale używam innego pola w funkcji.

select  locationname + '<p>' from location;

W tym wycinku wynikiem jest lista zer. Spodziewałbym się łańcucha z tekstem z nazwy lokalizacji i '<p>'literałów.

Ian Vink
źródło

Odpowiedzi:

266

Spróbuj użyć ||zamiast+

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

Z dokumentacji SQLite :

|| operator jest „konkatenowany” - łączy ze sobą dwa łańcuchy swoich operandów.

codaddict
źródło
26
pole 1 || field2 zwraca wartość null, jeśli jedno z pól ma wartość null. Można by chcieć zrobić ifnull (field1, '') || ifnull (field2, ''). To da ci odpowiedź, jeśli jedno lub oba pola są puste. Następnie możesz dowiedzieć się, co chcesz zrobić, jeśli oba byłyby zerowe.
Tom Cerul
5
@TomCerul lub użyjCOALESCE(nullable_field, '') || COALESCE(another_nullable_field, '')
zx8754
38

||Operator jest konkatenacją w SQLite. Użyj tego kodu:

select  locationname || '<p>' from location;
shamittomar
źródło
11
Podwójny potok jest również metodą łączenia ciągów według ANSI, obsługiwaną również przez Oracle i PostgreSQL ...
OMG Kucyki
32

Dla porownania,

SQLite ||  
Oracle CONCAT (ciąg1, ciąg2) lub ||
MySQL CONCAT (ciąg1, ciąg2, ciąg3 ...) lub || jeśli PIPES_AS_CONCAT jest włączony
Postgres CONCAT (ciąg1, ciąg2, ciąg3 ...) lub ||
Microsoft SQL Server 2012+ CONCAT (ciąg1, ciąg2, ciąg3 ...) lub + 
Microsoft Access +  
Brian Burns
źródło
1
Począwszy od 2012 r., SQL Server obsługuje równieżCONCAT(string1, string2, string3...)
Tim Cooke
1
MySQL obsługuje również, ||jeśli PIPES_AS_CONCATtryb jest włączony.
Paul Spiegel
2

w przypadku programu Visual Studio 2010 przy użyciu projektanta lub kreatora źródeł danych masz problem z używaniem || operator. Utwórz widok w bazie danych sqlite i utwórz z tego źródła danych.

Zobacz także ten wątek .

szybkie losowanie
źródło