Я уже некоторое время пользуюсь этим :
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 я обнаружил множество проблем с производительностью пользовательских функций.