Функция LEN не включая конечные пробелы в SQL Server

У меня есть следующая тестовая таблица в SQL Server 2005:

CREATE TABLE [dbo].[TestTable]
(
 [ID] [int] NOT NULL,
 [TestField] [varchar](100) NOT NULL
) 

Заполненный с:

INSERT INTO TestTable (ID, TestField) VALUES (1, 'A value');   -- Len = 7
INSERT INTO TestTable (ID, TestField) VALUES (2, 'Another value      '); -- Len = 13 + 6 spaces

Когда я пытаюсь найти длину TestField с SQL Server LEN () функция, это не считает конечные пробелы - например:

-- Note: Also results the grid view of TestField do not show trailing spaces (SQL Server 2005).
SELECT 
 ID, 
 TestField, 
 LEN(TestField) As LenOfTestField, -- Does not include trailing spaces
FROM 
 TestTable

Как я включаю конечные пробелы в результат длины?

102
задан Jason Snelders 8 January 2010 в 04:52
поделиться

2 ответа

Это четко документировано Microsoft в MSDN по адресу http://msdn.microsoft.com/en-us/library/ms190329(SQL.90).aspx, где сказано, что LEN "возвращает количество символов указанного строкового выражения, исключая пробелы в трейлинге". Однако, это легко пропустить, если вы не опасаетесь.

Вместо этого нужно использовать функцию DATALENGTH - см. http://msdn.microsoft.com/en-us/library/ms173486(SQL.90).aspx, которая "возвращает количество байт, используемое для представления любого выражения".

Example:

SELECT 
    ID, 
    TestField, 
    LEN(TestField) As LenOfTestField,           -- Does not include trailing spaces
    DATALENGTH(TestField) As DataLengthOfTestField      -- Shows the true length of data, including trailing spaces.
FROM 
    TestTable
117
ответ дан 24 November 2019 в 04:28
поделиться

Вам также необходимо убедиться, что ваши данные действительно сохраняются с помощью трейлинговых пустот. Когда ANSI PADDING выключен (по умолчанию):

Пустые символы в значении трейлинга вставленные в варчарную колонну обработанный.

5
ответ дан 24 November 2019 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: