Вопросы по IT / замена букв на цифры в MS SQL
|
|
---|---|
#18+
vad72 05.06.2020, 11:35 Есть текстовое поле, в нем английские буквы и цифры, например 62Z4953FR45834A. К в SQL запросе заменить буквы на цифры? Что-то не могу сообразить. Код: SQL 1.
... |
|
А вы шо думали, всё так просто?
:
|
|
09.06.2020, 05:27 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
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 ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
09.06.2020, 15:25 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
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 Я сразу указал 2017 А что у товарища, я не знаю. Кстати, такие версии SQL Server как 2007, 2011, 2015 - регулярно появляются в резюме и на интервью. ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
09.06.2020, 15:44 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
kDn 09.06.2020, 17:58 Так что тут разложить строку в символы и собрать ее обратно не осилили? Нужен пример? :) SandalTree Вы бы еще товарищу объяснили, что можно менять так 1-к-1, и нихрена нельзя 1 символ на 2 (: Вот к примеру оттранслируйте вот это вот: 'qwertyuiopas' туда в цифери-обратно в буквери без потерь. Ы? Обратно по любому не получится. Допустим переводим 'qwertyuiopas' в '012456789101112' И как это вернуть "взад"? Кстати, я не сказал что скульная функция - супер крута. Она просто есть и иногда может быть очень удобна. ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
09.06.2020, 22:25 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
kDn 10.06.2020, 02:01 SandalTree 09.06.2020, 22:25 Как вы себе это представляете? Обратно по любому не получится. Вопрос второкота был проигнорирован. Цитата А по какому правилу должна производится замена? ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
10.06.2020, 02:16 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
vad72 10.06.2020, 07:51 SandalTree 10.06.2020, 02:16 Цитата ... У меня два выхода, изменить в своей таблице тип поля с bigint на varchar, но что-то мне подсказывает, что поля такого типа будут хуже индексироваться, если я не прав, то поправьте меня, плюс перезалить все данные нужно будет, хотя, возможно, есть какой-то более оперативный способ изменения типа поля. Поэтому я решил на лету менять буквы на цифры (на ASCII код буквы), чтобы на выходе было то, что можно вставить в поле с типом bigint, и чтобы поле оставалось уникальным. Хорошо, что пока буквы в определенных местах и можно просто решить проблему. А если завтра буквы начнут появляться в любом месте, то тогда что? Придется перебирать все позиции в строке и менять всё, неважно буква или цифра, на ASCII код. :( 1. Сколько у вас разных букв? Если 9 или меньше, то тупо меняете на 1-9 Если первый символ не может быть буквой, то у вас есть опция использовать ещё и "0" 2. Использовать BINARY_CHECKSUM. Однако, там возможны дубликаты, поэтому можете сделать так Код: SQL 1. 2. 3.
... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
10.06.2020, 15:47 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
kDn 10.06.2020, 15:35 vad72 10.06.2020, 11:14 ну да, главное чтобы без коллизий. Я выше писал зачем, нужно "текстовое поле" засунуть в bigint. SAP разрабатывали на "экстремальные ситуации". Подозреваю что у топик-стартера не этот случай и возможно дажи хватило-бы INT. Может быть просто создать справочник с INT IDENTITY(-2147483647,1). Не думаю что там будет больше 4 миллиардов значений. ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
10.06.2020, 15:52 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
vad72 11.06.2020, 08:36 SandalTree 10.06.2020, 15:52 SAP разрабатывали на "экстремальные ситуации". Ну тогда вам нужно просто сделать табличку с переназначениями, в которой каждый код из САП будет соответствовать коду в INT IDENTITY(-2147483647,1). ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
11.06.2020, 15:20 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
vad72 11.06.2020, 14:02 Бояннизд02 11.06.2020, 13:52 так если обратная связь не нужна, то нахера этот огород? А вот если бы буквы попадались в любом месте, то пришлось бы "пробегаться" по-символьно и делать замену каждого символа через анси в трехзначную цифру. Вы потеряете больше на ежедневные конвертации чем вместо 8 байт в PK будете юзать 16. Главное что кластерный индекс делайте INT. ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
11.06.2020, 15:23 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
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 будет не сильно быстрее чем оригинал, но медленнее чем INT. Если вам нужны "предыдущие значения", скиньте их в "исторический справочник" и дело с концом. Так будет максимально быстро работать. ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
11.06.2020, 17:14 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
kDn 11.06.2020, 17:30 vad72 11.06.2020, 16:54 Ну, я не знаю, какой смысл еще одного поля, если можно преобразовать исходное в BIGINT, даже с возможностью выкрутить из него обратно начальное значение, если понадобится. Ещё на много-много лет хватит, а к тому времени он уже на пенсию уйдёт. ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
11.06.2020, 18:15 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
vad72 12.06.2020, 08:35 SandalTree 11.06.2020, 18:15 Ему инта вполне хватит, у него 200 миллионов значений против 4 миллиардов. Ещё на много-много лет хватит, а к тому времени он уже на пенсию уйдёт. Ну или оставьте всё как есть и не пудрите людям мозги. ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
12.06.2020, 14:11 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
vad72 15.06.2020, 08:06 SandalTree 12.06.2020, 14:11 Какая разница сколько там цифр, главное сколько там всего записей. ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
15.06.2020, 14:10 |
|
Вопросы по IT / замена букв на цифры в MS SQL
|
|||
---|---|---|---|
#18+
vad72 18.06.2020, 07:50 SandalTree 15.06.2020, 14:10 vad72 15.06.2020, 08:06 ... Да и вообще, что-то я устал, если честно. Хочется чего-то нового, например, открыть какую-то маленькую кофейню и наслаждаться жизнью, работая на себя, а не заносить хвосты всем кому только можно (но это наёмный труд, всё по честному, без принуждения). Оставьте как есть. При таком обьёме данных при правильных индексах и запросах тормоза будут совсем небольшие. ... |
|||
А вы шо думали, всё так просто?
:
Нравится:
Не нравится:
|
|||
18.06.2020, 13:21 |
|
Start [/forum-old/search.php?do_search=1&tid=48282&author_mode=wrote_post&author=SandalTree&start_from=2215217]: |
0ms |
get settings: |
1ms |
get forum list: |
2ms |
searching: |
10ms |
get settings: |
1ms |
get forum list: |
3ms |
get topic data: |
2ms |
check forum access: |
0ms |
check topic access: |
0ms |
get forum data: |
0ms |
get found posts: |
37ms |
track hit: |
34ms |
get online users: |
8ms |
others: | 216ms |
total: | 314ms |
0 / 0 |