Лучшие методы для обрезки лидирующих нулей в SQL Server? - PullRequest
134 голосов
/ 19 марта 2009

Я уже некоторое время пользуюсь этим :

SUBSTRING(str_col, PATINDEX('%[^0]%', str_col), LEN(str_col))

Однако недавно я обнаружил проблему со столбцами со всеми символами «0», такими как «00000000», поскольку он никогда не находит совпадения, отличного от «0».

Альтернативная техника, которую я видел, состоит в использовании TRIM:

REPLACE(LTRIM(REPLACE(str_col, '0', ' ')), ' ', '0')

Это имеет проблему, если есть встроенные пробелы, потому что они будут превращены в «0», когда пробелы возвращаются в «0».

Я пытаюсь избежать скалярного UDF. В SQL Server 2005 я обнаружил множество проблем с производительностью пользовательских функций.

Ответы [ 13 ]

0 голосов
/ 16 августа 2018

Если вы не хотите конвертировать в int, я предпочитаю следующую логику, потому что она может обрабатывать нули IFNULL (поле, LTRIM (поле, '0'))

0 голосов
/ 30 января 2018
SELECT CAST(CAST('000000000' AS INTEGER) AS VARCHAR)

Это имеет ограничение на длину строки, которая может быть преобразована в INT

0 голосов
/ 12 июля 2016

Попробуйте это:

replace(ltrim(replace(@str, '0', ' ')), ' ', '0')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...