Способ отображения номера телефона, SQL-запрос - PullRequest
0 голосов
/ 16 октября 2018

Пожалуйста, помогите мне с приведенным ниже запросом, пожалуйста, modfiy и дайте мне знать, я использую ssms

Мне нужно отобразить только Phonenumber.Ниже приведен запрос, который я использую на данный момент.Я делю его на два столбца, потому что могут быть cell number и home phone.

 CONCAT(RIGHT(LEFT(HR_PN_1.PhoneNumberID, 4), 3), REPLACE(RIGHT(HR_PN_2.PhoneNumberID, 8), '-', '')) as 'PersonPhone',
    CASE
        WHEN HR_PN_2.PhoneNumberID is not null
    THEN CONCAT(RIGHT(LEFT(HR_PN_2.PhoneNumberID, 4), 3), REPLACE(RIGHT(HR_PN_2.PhoneNumberID, 8), '-', ''))
    END as 'PersonWorkPhone',

Пример данных в столбце PhoneNumnberID, который у меня в таблице HR_PN_1 and HR_PN_2, выглядит следующим образом:

(123)456-7890TOMMY
(123)456-7890 DAD
(123)456-7890 ***
(123)456-7890 2300
(123)456-7890CELL#
(123)456-7890

Мне нужно, чтобы эти номера отображались только в формате номера телефона (123)456-7890

Ответы [ 3 ]

0 голосов
/ 16 октября 2018

Если эти телефонные номера всегда в начале, то будет достаточно простого ВЛЕВО.

А если позиция номера телефона может измениться, но он всегда в одном и том же формате?
Тогда вы можете объединить SUBSTRING с PATINDEX.

SUBSTRING(PhoneNumberID, PATINDEX('%([0-9][0-9][0-9])[0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]%', PhoneNumberID), 13)

Затем обернуть его в CASEпросто чтобы не возвращать то, что не является номером телефона.

Пример фрагмента:

declare @HR_PN_1 table (HR_ID int identity (1,1) primary key, PhoneNumberID varchar(100));
declare @HR_PN_2 table (HR_ID int identity (1,1) primary key, PhoneNumberID varchar(100));

insert into @HR_PN_1 (PhoneNumberID) values
('(123)456-7891TOMMY'),
('(123)456-7892 DAD'),
('(123)456-7893 ***'),
('(123)456-7894 2300'),
('(123)456-7895CELL#'),
('(123)456-7896'),
('no phone');

insert into @HR_PN_2 (PhoneNumberID) 
select PhoneNumberID 
from @HR_PN_1
order by HR_ID desc;

SELECT hr1.HR_ID,
(CASE 
 WHEN hr1.PhoneNumberID like '%([0-9][0-9][0-9])[0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]%' 
 THEN SUBSTRING(hr1.PhoneNumberID, PATINDEX('%([0-9][0-9][0-9])[0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]%', hr1.PhoneNumberID), 13)
 END) AS "PersonPhone",
(CASE
 WHEN hr2.PhoneNumberID like '%([0-9][0-9][0-9])[0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]%' 
 THEN SUBSTRING(hr2.PhoneNumberID, PATINDEX('%([0-9][0-9][0-9])[0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]%', hr2.PhoneNumberID), 13)
 END) AS "PersonWorkPhone"
FROM @HR_PN_1 AS hr1
LEFT JOIN @HR_PN_2 AS hr2 ON (hr2.HR_ID = hr1.HR_ID);
0 голосов
/ 16 октября 2018

Как насчет этого?

SELECT SUBSTRING(yourcolumn, PATINDEX('%([0-9][0-9][0-9])[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]%',yourcolumn), 13)
FROM yourtable
0 голосов
/ 16 октября 2018

Если это значения в столбце, то вам может показаться, что вы хотите:

LEFT(HR_PN_1.PhoneNumberID, 13)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...