Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Замена Translate  [new]
dermama
Member

Откуда:
Сообщений: 226
Товарищи, приветствую

Подскажите пожалуйста, чем можно заменить функцию translate для того, чтобы переделать множество

data
-----------
SMITH800

В множество

name sal
------------------
SMITH 800

так как у меня SQL SERVER 2012, а данная функция только с 2017. Спасибо за внимание.
23 янв 19, 14:14    [21792134]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
dermama,

TRANSLATE это "множественный" REPLACE, о чём вопрос про переделки "множеств"
23 янв 19, 14:18    [21792149]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
dermama
Member

Откуда:
Сообщений: 226
TaPaK,

ну я просто не стал все копировать
DATA

SMITH800
ALLEN1600
WARD1250
JONES2975
MARTIN1250
BLAKE2850
CLARK2450
SCOTT3000
KING5000
TURNER1500
ADAMS1100
JAMES950
FORD3000
MILLER1300

данное множество мне необходимо переделать по примеру выше, в 2 отдельных столбца, по идее я все могу через REPLACE сделать?
23 янв 19, 14:22    [21792159]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
dermama,

автор
по примеру выше, в 2 отдельных столбца, по идее я все могу через REPLACE сделать?

нет, ни TRANSLATE ни REPLACE такого не делает
23 янв 19, 14:24    [21792166]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
dermama
Member

Откуда:
Сообщений: 226
TaPaK,

ХМ, а посредством чего тогда решать?
23 янв 19, 14:26    [21792172]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
dermama
TaPaK,

ХМ, а посредством чего тогда решать?

определить правило по которому разделять.

хотя можно и REPLCAE 1. Заменить все цифры на '', 2. Заменить все буквы на '' или вырезать из общего результат первого. Это если слева буквы, справа цифры
23 янв 19, 14:28    [21792178]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
dermama
Member

Откуда:
Сообщений: 226
TaPaK,

хорошо, попробую, если получится -отпишусь
23 янв 19, 14:30    [21792181]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
dermama
Member

Откуда:
Сообщений: 226
TaPaK,
ТИп данных varcahr, по сути задание не требует того, чтобы цифры были int в итогов значении
23 янв 19, 14:32    [21792186]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
declare @t table (data varchar(100));

insert into @t (data)
values ('SMITH800'),
('ALLEN1600'),
('WARD1250'),
('JONES2975'),
('MARTIN1250'),
('BLAKE2850'),
('CLARK2450'),
('SCOTT3000'),
('KING5000'),
('TURNER1500'),
('ADAMS1100'),
('JAMES950'),
('FORD3000'),
('MILLER1300')

select 
	left(data, PATINDEX('%[0-9]%', data) - 1) as name, 
	substring(data, PATINDEX('%[0-9]%', data), len(data)) as number
from @t 
23 янв 19, 14:32    [21792190]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
dermama
Member

Откуда:
Сообщений: 226
Konst_One,

благодарствую, но теперь прям не интересно стало, буду данный синтаксис разбирать, хотелось и самому попробовать.
23 янв 19, 14:38    [21792202]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
это один из вариант решающий вашу задачу
23 янв 19, 14:39    [21792206]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
dermama
Member

Откуда:
Сообщений: 226
Konst_One,

да, только думать над другим вариатом уже хочется меньше, теперь, для начала я разберу этот.
23 янв 19, 14:42    [21792210]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
dermama
Member

Откуда:
Сообщений: 226
Konst_One,

Подскажите пожалуйста, что значит '%[0-9]%', ? Документация не совсем помогает с примером плана
SELECT PATINDEX('%en_ure%', 'please ensure the door is locked');
и результатом 8.
23 янв 19, 14:57    [21792252]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
https://docs.microsoft.com/ru-ru/sql/t-sql/language-elements/wildcard-character-s-to-match-transact-sql?view=sql-server-2017
23 янв 19, 14:58    [21792256]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
dermama
Member

Откуда:
Сообщений: 226
dermama,

разобрался, считае количество символов до цифр, только выводит вместо нужных 5 , например 6, по сему -1 и указан.

SELECT PATINDEX('%[0-9]%', data) - 1
FROM data
23 янв 19, 15:03    [21792268]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
Konst_One
Member

Откуда:
Сообщений: 11517
нет, он выводит начальну. позицию найденного выражения в строке
23 янв 19, 15:04    [21792270]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
dermama
Member

Откуда:
Сообщений: 226
Konst_One,

напоминает отдаленно REGEXP_REPLACE , для меня пока сложновато, буду внедряться
23 янв 19, 15:09    [21792281]     Ответить | Цитировать Сообщить модератору
 Re: Замена Translate  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
Konst_One
declare @t table (data varchar(100));

insert into @t (data)
values ('SMITH800'),
('ALLEN1600'),
('WARD1250'),
('JONES2975'),
('MARTIN1250'),
('BLAKE2850'),
('CLARK2450'),
('SCOTT3000'),
('KING5000'),
('TURNER1500'),
('ADAMS1100'),
('JAMES950'),
('FORD3000'),
('MILLER1300')

select 
	left(data, PATINDEX('%[0-9]%', data) - 1) as name, 
	substring(data, PATINDEX('%[0-9]%', data), len(data)) as number
from @t 
Вместо SUBSTRING короче было бы STUFF
23 янв 19, 16:18    [21792393]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить