Jak połączyć tekst w kwerendzie na serwerze sql?


80

Następujący SQL:

SELECT notes + 'SomeText'
FROM NotesTable a 

Podaj błąd:

Typy danych nvarchar i text są niezgodne w operatorze dodawania.

Odpowiedzi:


81

Jedynym sposobem byłoby przekonwertowanie pola tekstowego na pole nvarchar.

Select Cast(notes as nvarchar(4000)) + 'SomeText'
From NotesTable a

W przeciwnym razie sugeruję wykonanie konkatenacji w Twojej aplikacji.


Więc rzucasz textjako „ogromne” 4000, nvarcharaby upewnić się, że prawie wszystko będzie pasować?
Matthieu

23

Możesz również rozważyć wartości NULL. W twoim przykładzie, jeśli notatki do kolumny mają wartość null, wynikowa wartość będzie równa NULL. Jeśli chcesz, aby wartości null zachowywały się jak puste ciągi (tak, że odpowiedź brzmi „SomeText”), użyj funkcji IsNull:

Select IsNull(Cast(notes as nvarchar(4000)),'') + 'SomeText' From NotesTable a

21

Jeśli używasz SQL Server 2005 lub nowszego, w zależności od rozmiaru danych w polu Uwagi, możesz rozważyć rzutowanie na nvarchar (max) zamiast rzutowania na określoną długość, co może spowodować obcięcie ciągu.

Select Cast(notes as nvarchar(max)) + 'SomeText' From NotesTable a

2
To powinna być właściwa odpowiedź. Pozwala uniknąć obcinania tekstu.
billy

Czy zużywa więcej pamięci, czy w jakiś sposób „automatycznie dostosowuje się” do rozmiaru źródła?
Matthieu

6

Musisz jawnie rzutować typy ciągów na te same, aby je połączyć. W twoim przypadku możesz rozwiązać problem, po prostu dodając „N” przed „SomeText” (N'SomeText '). Jeśli to nie zadziała, spróbuj Cast ('SomeText' jako nvarchar (8)).



2

Jeśli używasz SQL Server 2005 (lub nowszego), możesz rozważyć przejście na NVARCHAR (MAX) w definicji tabeli; Typy danych TEXT, NTEXT i IMAGE programu SQL Server 2000 zostaną wycofane w przyszłych wersjach programu SQL Server. SQL Server 2005 zapewnia wsteczną kompatybilność z typami danych, ale prawdopodobnie powinieneś używać zamiast tego VARCHAR (MAX), NVARCHAR (MAX) i VARBINARY (MAX).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.