У меня есть данные я моющийся в старой таблице данных до перемещения его к новому. Одно из полей имеет пробелы в столбце, праве и оставленный. Я написал следующий код, чтобы обратиться к этому и все еще иметь ведущие пробелы?? Объем данных является чистым при использовании этого кода, но по некоторым причинам существуют пробелы до адресов RT... У кого-либо еще был этот тип проблемы?
,CASE
WHEN PropStreetAddr IS NOT NULL
THEN (CONVERT(VARCHAR(28),PropStreetAddr))
WHEN PropStreetAddr is NOT NULL Then (Select LTrim(RTrim(PropStreetAddr)) As PropStreetAddr)
ELSE NULL END as 'PROPERTY_STREET_ADDRESS'
Демонстрационные выходные данные:
1234 20th St
RT 1 BOX 2
560 King St
610 Nowland Rd
RT 1
1085 YouAreHere Ln
RT 24 Box 12
Вот выражение, которое будет работать. Я предполагаю, что невидимого контента нет. Вы все равно должны следовать рекомендации @OMG Ponies, если подозреваете это. И я думаю, что выражение PATINDEX можно добавить к этому выражению, если вам нужно иметь дело с невидимым содержимым.
SQL Server CASE обрабатывает только одно предложение WHEN, а затем прерывается. Таким образом, вы никогда не дойдете до второго преобразования данных. Кроме того, все значения NULL будут преобразованы в NULL при использовании функций LTRIM и RTRIM. Таким образом, вам не нужно проверять это, если вы не хотите что-то делать с NULL.
Итак, попробуйте следующее:
CONVERT(VARCHAR(28), LTRIM(RTRIM(PropStreetAddr))) as [PROPERTY_STREET_ADDRESS]
Используйте:
WHEN PropStreetAddr is NOT NULL THEN
(SELECT LTRIM(RTRIM((REPLACE(PropStreetAddr,
SUBSTRING(PropStreetAddr,
PATINDEX('%[^a-zA-Z0-9 '''''']%', PropStreetAddr), 1), '') AS PropStreetAddr)