У меня есть следующая тестовая таблица в 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
Как я включаю конечные пробелы в результат длины?
Это четко документировано 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
Вам также необходимо убедиться, что ваши данные действительно сохраняются с помощью трейлинговых пустот. Когда ANSI PADDING выключен (по умолчанию):
Пустые символы в значении трейлинга вставленные в варчарную колонну обработанный.