У меня есть телефонные поля в базе данных, как следующее:тест PATINDEX для формата номер телефона
phone_num VARCHAR(50) NULL
Это выглядит как почти все из этих телефонных полеев 10 символов или менее. Если они 10 символов, я отформатирую их в форме (xxx) xxx-xxxx
.
CREATE FUNCTION [dbo].[FormatPhone](@Phone NVARCHAR(50)) RETURNS NVARCHAR(50) AS BEGIN
declare @fone NVARCHAR(50), @len INT;
set @fone=LTRIM(RTRIM(ISNULL(@Phone,'')));
set @len = LEN(@fone);
return case
when @len=10 then
'(' + SUBSTRING(@fone, 1, 3) + ') ' +
SUBSTRING(@fone, 4, 3) + '-' +
SUBSTRING(@fone, 7, 4)
when 10<@len then
'(' + SUBSTRING(@fone, 1, 3) + ') ' +
SUBSTRING(@fone, 4, 3) + '-' +
SUBSTRING(@fone, 7, 4) + 'x' +
SUBSTRING(@fone, 11, @len)
else
@fone
end;
END
Переменная @fone
устраняет NULL
значения и ведущие/ведомые пробелы.
Наше программное обеспечение вводит только номера телефонов с использованием числовых значений.
Тем не менее, нет ничего, что помешало бы одному из многих администраторов на любом из наших сайтов клиента вручную выполнить некоторый SQL для вставки или обновления записи.
Они могут видеть формат, который мы используем, и попытаться вручную ввести эти данные.
Или, они могут попробовать ввести его как xxx.xxx.xxxx
, или ... ???? Кто знает?
Что такое хороший способ поиска переменной @fone
для любых указаний, что она уже была изменена? Действительно ли PATINDEX?
вы просто хотите знать, все ли вы данные в этом формате? (xxx) xxx-xxxx – chungtinhlakho
Нет, но если это 10 цифр, я хочу вернуть его в этом формате. Если это всего лишь 7 цифр, я просто верну '1234567',' IsBlank' или что-то другое, что наш клиент решит использовать это поле. Если есть 10 цифр, «NNN.NNN.NNNN» или «NNN-NNN-NNNN», я могу вернуть «(NNN) NNN-NNNN'. Если от 11 до 15 цифр, я могу вернуть его в форме '(NNN) NNN-NNNNNNNN' (мне пришлось использовать N). – jp2code