powered by simpleCommunicator - 21.11.28     © 2024 Programmizd 02
Map
Форумы / Вопросы по IT / замена букв на цифры в MS SQL, Поиск: Искать сообщения, созданные автором: SandalTree  
14 сообщений из 14, страница 1 из 1
Вопросы по IT / замена букв на цифры в MS SQL
    #2207021
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
vad72  05.06.2020, 11:35
Есть текстовое поле, в нем английские буквы и цифры, например 62Z4953FR45834A.
К в SQL запросе заменить буквы на цифры?
Что-то не могу сообразить.
SQL 2017
Код: SQL
1.
PRINT TRANSLATE ( '62Z4953FR45834A','ZFRA','0123');
...
А вы шо думали, всё так просто?
Рейтинг: 1 / 0
Нравится: eNose
Вопросы по IT / замена букв на цифры в MS SQL
    #2208161
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
WildMage  09.06.2020, 08:27
vad72  09.06.2020, 07:50
SandalTree  09.06.2020, 05:27
...
у нас server 2007 , нет такой функции. Но в моем случае, нужно было бы вместо буквы вставлять две цифры, чтобы не было пересечений.
Но решение очень элегантное!
Что за версия сиквела? Такой не бывает
гуглу забанили?

Уже 4 года этой функции как с 2017 и на Ажуре.
https://docs.microsoft.com/en-us/sql/t-sql/functions/translate-transact-sql?view=sql-server-ver15
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2208205
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
WildMage  09.06.2020, 15:26
SandalTree  09.06.2020, 15:25
WildMage  09.06.2020, 08:27
...
гуглу забанили?

Уже 4 года этой функции как с 2017 и на Ажуре.
https://docs.microsoft.com/en-us/sql/t-sql/functions/translate-transact-sql?view=sql-server-ver15
Да при чем тут Гугл. Он сказал, что версия секвела 2007. Такой нет!
Это вообще про что?

Я сразу указал 2017

А что у товарища, я не знаю.

Кстати, такие версии SQL Server как 2007, 2011, 2015 - регулярно появляются в резюме и на интервью.
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2209286
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
kDn  09.06.2020, 17:58
Так что тут разложить строку в символы и собрать ее обратно не осилили? Нужен пример? :)

SandalTree
Вы бы еще товарищу объяснили, что можно менять так 1-к-1, и нихрена нельзя 1 символ на 2 (:
Вот к примеру оттранслируйте вот это вот: 'qwertyuiopas' туда в цифери-обратно в буквери без потерь. Ы?
Как вы себе это представляете?
Обратно по любому не получится.

Допустим переводим 'qwertyuiopas' в '012456789101112'
И как это вернуть "взад"?

Кстати, я не сказал что скульная функция - супер крута. Она просто есть и иногда может быть очень удобна.
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2209761
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
kDn  10.06.2020, 02:01
SandalTree  09.06.2020, 22:25
Как вы себе это представляете?
Обратно по любому не получится.
Смотря как кодировать. Все возможно, умеючи. (:
Вот и я о том-же

Вопрос второкота был проигнорирован.
Цитата 
А по какому правилу должна производится замена?
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2211132
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
vad72  10.06.2020, 07:51
SandalTree  10.06.2020, 02:16
Цитата 
...
да по любому принципу. В базу данных импортируются таблицы от клиентов (текстовые файлы CSV) через утилиту SQLCMD, импортируется в существующую таблицу, которой уже 10 лет и там миллионы записей. В этой таблице есть поле с индексом типа bigint. Но у одного из клиентов, изменилась ПО, в результате которого в CSV файле, вместо поля с цифрами, теперь поле, в котором есть и буквы. И он, сука, нихрена сделать не может, так как это, блядь накуй, SAP, у него специалистов нет, а сам он тупорылый гном.
У меня два выхода, изменить в своей таблице тип поля с bigint на varchar, но что-то мне подсказывает, что поля такого типа будут хуже индексироваться, если я не прав, то поправьте меня, плюс перезалить все данные нужно будет, хотя, возможно, есть какой-то более оперативный способ изменения типа поля.
Поэтому я решил на лету менять буквы на цифры (на ASCII код буквы), чтобы на выходе было то, что можно вставить в поле с типом bigint, и чтобы поле оставалось уникальным. Хорошо, что пока буквы в определенных местах и можно просто решить проблему. А если завтра буквы начнут появляться в любом месте, то тогда что? Придется перебирать все позиции в строке и менять всё, неважно буква или цифра, на ASCII код. :(
Так понятнее.

1. Сколько у вас разных букв? Если 9 или меньше, то тупо меняете на 1-9
Если первый символ не может быть буквой, то у вас есть опция использовать ещё и "0"

2. Использовать BINARY_CHECKSUM. Однако, там возможны дубликаты, поэтому можете сделать так
Код: SQL
1.
2.
3.
SELECT CAST(BINARY_CHECKSUM(LEFT(Value,8)) as BIGINT) * POWER(CAST(2 as BIGINT),32) + CAST(BINARY_CHECKSUM(RIGHT(Value,8)) as BIGINT)
, Value
FROM Table
По любому, если у вас 15 символов, вы не можете запихнуть их в BIGINT без дубликатов.
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2211155
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
kDn  10.06.2020, 15:35
vad72  10.06.2020, 11:14
ну да, главное чтобы без коллизий. Я выше писал зачем, нужно "текстовое поле" засунуть в bigint.
Ненадо нихрена никуда засовывать. И заодно не надо считать серверописателей полными баранами, которые без подсказки не знают как чего быстрее работать будет. Итог - ежели схему можно поменять убрав нафиг бигинт, но нужно поменять и забыть.
Вообще-то он может быть прав.
SAP разрабатывали на "экстремальные ситуации".
Подозреваю что у топик-стартера не этот случай и возможно дажи хватило-бы INT.

Может быть просто создать справочник с INT IDENTITY(-2147483647,1).
Не думаю что там будет больше 4 миллиардов значений.
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2213565
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
vad72  11.06.2020, 08:36
SandalTree  10.06.2020, 15:52
SAP разрабатывали на "экстремальные ситуации".
Если я правильно понял ситуацию, то там специалисты уволились, которые "писали/настраивали" систему, вернее их переманили в другую компанию. А те, что остались, они не могут что-то сделать, так как не хватает компетенции. Бизнес будет сносить этот САП, так как он столько денег не зарабатывает, чтобы оплачивать эту систему.
Я знал бизнес, который так обанкротился.
Ну тогда вам нужно просто сделать табличку с переназначениями, в которой каждый код из САП будет соответствовать коду в INT IDENTITY(-2147483647,1).
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2213571
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
vad72  11.06.2020, 14:02
Бояннизд02  11.06.2020, 13:52
так если обратная связь не нужна, то нахера этот огород?
Чтобы импортировать поле с буквами в поле типа bigint. Но мне повезло, что буквы большие от A-Z, у них анси код две цифры, и они в двух местах только попадаются, поэтому можно легко в бигинт и назад.

А вот если бы буквы попадались в любом месте, то пришлось бы "пробегаться" по-символьно и делать замену каждого символа через анси в трехзначную цифру.
Если у вас НЕ единовременный импорт, а нужно будет бегать туда-сюда, то лучше уж оставить всё как есть.
Вы потеряете больше на ежедневные конвертации чем вместо 8 байт в PK будете юзать 16.
Главное что кластерный индекс делайте INT.
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2213729
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
vad72  11.06.2020, 16:54
kDn  11.06.2020, 16:30
vad72  11.06.2020, 15:03
...
Ладно, буду предполагать, что вы не брешете. Поскольку я последние годы чутка злой на РФ и ни при каких обстоятельствах деловых отношений с этой страной иметь не хочу.

---------------
Теперь по сути вашего вопроса.
Менять нечто там в id для данных приходящих извне - бред.
Вам фактически нужно сделать чтобы id (PK) менялся самостоятельно хоть как IDENTITY, хоть через секвенс. Пофиг.
А для сопоставления нужно попросту использовать доп. поле refExternalID, где вы на всяк случай будете сохранять ID из внешней системы. Вот и все.

* Когда речь идет о модификации таблиц с мульярдами строк, то нужно понимать, что это будет крайне долго и затратно по логу. Следствие - возможно имеет смысл создать таблицу нужной структуры - слить туда данные неспешно, дальше грохнуть исходную, а целевую переименовать.
Ну, я не знаю, какой смысл еще одного поля, если можно преобразовать исходное в BIGINT, даже с возможностью выкрутить из него обратно начальное значение, если понадобится.
А какой в этом смысл?

Во первых, BIGINT будет не сильно быстрее чем оригинал, но медленнее чем INT.

Если вам нужны "предыдущие значения", скиньте их в "исторический справочник" и дело с концом. Так будет максимально быстро работать.
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2213806
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
kDn  11.06.2020, 17:30
vad72  11.06.2020, 16:54
Ну, я не знаю, какой смысл еще одного поля, если можно преобразовать исходное в BIGINT, даже с возможностью выкрутить из него обратно начальное значение, если понадобится.
Это вообще разные вопросы. Если вам нужен источник - то сохраняете как есть (без преобразований) в отдельном поле. Если же источник - не нужен, можно не сохранять. Что же касается самого PK, то в случае если не хватает INT - можете изменить его на BIGINT, попутно не забыв поменять все связанные таблицы, либо можно оставить как есть, я ведь на 99% уверен, что у вас еще диапазон отрицательных значений в нем не освоен))). А RESEED при необходимости никто не отменял. Заниматься же преобразованием чего-то внешнего по загадочным законам - бред. Чем быстрее до вас это дойдет, тем меньше проблем огребете.
Ему инта вполне хватит, у него 200 миллионов значений против 4 миллиардов.
Ещё на много-много лет хватит, а к тому времени он уже на пенсию уйдёт.
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2215217
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
vad72  12.06.2020, 08:35
SandalTree  11.06.2020, 18:15
Ему инта вполне хватит, у него 200 миллионов значений против 4 миллиардов.
Ещё на много-много лет хватит, а к тому времени он уже на пенсию уйдёт.
максимальное число там 199 999 889 612 349 , так что никак в INT
Какая разница сколько там цифр, главное сколько там всего записей, и если вам нужна производительность и вы не понимаете идею, которую вам предлагают, то переспросите.
Ну или оставьте всё как есть и не пудрите людям мозги.
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2221654
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
vad72  15.06.2020, 08:06
SandalTree  12.06.2020, 14:11
Какая разница сколько там цифр, главное сколько там всего записей.
может я не верно озвучил ранее, тогда повторюсь, у меня импортируется не одна таблица, это поле не просто PK, по этому полю идет связь с другими таблицами, его нельзя тупо заменять на другой "автосчетчик".
Вопрос в том у вас единовременная конвертация или вы собираетесь это делать регулярно или вообще работать в параллельном режиме?
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
Вопросы по IT / замена букв на цифры в MS SQL
    #2229548
SandalTree
Скрыть профиль Поместить в игнор-лист
Участник
[игнорирует гостей кроме]
Powered by Power Rangers
vad72  18.06.2020, 07:50
SandalTree  15.06.2020, 14:10
vad72  15.06.2020, 08:06
...
Вопрос в том у вас единовременная конвертация или вы собираетесь это делать регулярно или вообще работать в параллельном режиме?
файлы поступают постоянно. Я согласен, что дополнительное поле с первичным ключом с буквами было бы красиво, но если его можно на ходу туда сюда преобразовывать, то пока не буду делать.

Да и вообще, что-то я устал, если честно. Хочется чего-то нового, например, открыть какую-то маленькую кофейню и наслаждаться жизнью, работая на себя, а не заносить хвосты всем кому только можно (но это наёмный труд, всё по честному, без принуждения). [:smile]
Ну так забейте.
Оставьте как есть.
При таком обьёме данных при правильных индексах и запросах тормоза будут совсем небольшие.
...
А вы шо думали, всё так просто?
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Вопросы по IT / замена букв на цифры в MS SQL, Поиск: Искать сообщения, созданные автором: SandalTree  
Пользователи онлайн (19): Анонимы (17), Yandex Bot, Bing Bot 1 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]