powered by simpleCommunicator - 21.11.28     © 2024 Programmizd 02
Map
Форумы / Вопросы по IT / замена букв на цифры в MS SQL
25 сообщений из 53, страница 2 из 3
замена букв на цифры в 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
замена букв на цифры в 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
замена букв на цифры в MS SQL
    #2211205
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kDn  10.06.2020, 15:35
Итог - ежели схему можно поменять убрав нафиг бигинт, но нужно поменять и забыть.
Я могу поменять и забыть, но это поле праймере кей, по нему идет связь с другими таблицами.
Конкретно сейчас в этой табличке 239 672 048 записей. Что будет со скоростью работы sql-запросов, процедур ? Я боюсь, что скорость может снизится, а мне такое не подходит.
...
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2211248
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eNose  10.06.2020, 15:33
Вадик, извини за вопрос.

Ты гуманитарий?
военный, не знаю куда их, но круглое носим, квадратное катаем.
...
Рейтинг: 1 / 0
Нравится: eNose
замена букв на цифры в MS SQL
    #2211684
kDn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g?oes to sleep
vad72  10.06.2020, 16:19
военный, не знаю куда их, но круглое носим, квадратное катаем.
Ага... ща тебе хохол насоветует в моем лице))). У меня прям конфликт интересов - с одной стороны професси анальный, с другой похерить базу брацким воякам был бы рад. Надеюсь там шота ценное и бакапы как правило уже проепаны?

Вообще сандаль дело говорит, вполне годный вариант. Любой из них.
...
Дилинь Дилинь Дилинь 798413147632722479082280201[:frown][:grin2]
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2212122
Бояннизд02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сообщение под именем пользователя
и за ради чего этот изврат?
давайте попросим вада72 полный идентификатор, не удивлюсь. если вдруг там окажется guid.
странно, что ещё никто не предложил варианта с дополнительным полем.
...
...верить в наше время нельзя никому, порой даже самому себе. Мне - можно. (с) [:kozel]
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2212793
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бояннизд02  10.06.2020, 21:13
и за ради чего этот изврат?
давайте попросим вада72 полный идентификатор, не удивлюсь. если вдруг там окажется guid.
странно, что ещё никто не предложил варианта с дополнительным полем.
И куда мне это дополнительное поле? :)
Это поле, которое 15 лет существует - primary key таблицы, через которое, естественно, идет связь на другие таблицы в БД.
И так как на том конце дегенераты, которые не могут подготовить файл для импорта, то мне приходится на моей стороне, где собираются все данные со всех компаний идти на один из шагов:
1. Изменить все праймеры кей в существующих таблицах с bigint на varchar (с учетом, что кол-во записей несколько миллиардов в БД, это займет некоторое время). Скорость выборок упадет.
2. Но ходу при импорте данных из файла преобразовывать (хешировать) их столбец с буквами в bigint (и там не guid). Тут, как по мне, никаких проблем не должно возникнуть, сейчас так и настроил.
3. Увольнять персонал на том конце, пока не сделают поле типа bigint (но я на такое никогда не иду, все мы люди, нужно друг другу помогать, тем более, что там SAP, и они и так там всё в "рукопашную" делают, бедняги).

P.S. Кстати, они мне еще одну задачку добавили, стали отрицательные числа в текстовый файл писать в виде 1234.56- . Тоже надо подумать, как это исправить на лету.
...
Изменено: 11.06.2020, 08:25 - vad72
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2212801
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kDn  10.06.2020, 18:45
Надеюсь там шота ценное и бакапы как правило уже проепаны?
Она ценная только для меня, так как я использую её для выполнения своих непосредственных обязанностей - анализа и аудита компаний семи областей Украины. На основе этих данных акционеры принимают свои управленческие решения. Я просто у них инструмент для анализа. А мне для анализа нужен массив данных.
...
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2212805
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree  10.06.2020, 15:52
SAP разрабатывали на "экстремальные ситуации".
Если я правильно понял ситуацию, то там специалисты уволились, которые "писали/настраивали" систему, вернее их переманили в другую компанию. А те, что остались, они не могут что-то сделать, так как не хватает компетенции. Бизнес будет сносить этот САП, так как он столько денег не зарабатывает, чтобы оплачивать эту систему.
...
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2213430
Бояннизд02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сообщение под именем пользователя
так если обратная связь не нужна, то нахера этот огород?
...
...верить в наше время нельзя никому, порой даже самому себе. Мне - можно. (с) [:kozel]
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2213442
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бояннизд02  11.06.2020, 13:52
так если обратная связь не нужна, то нахера этот огород?
Чтобы импортировать поле с буквами в поле типа bigint. Но мне повезло, что буквы большие от A-Z, у них анси код две цифры, и они в двух местах только попадаются, поэтому можно легко в бигинт и назад.

А вот если бы буквы попадались в любом месте, то пришлось бы "пробегаться" по-символьно и делать замену каждого символа через анси в трехзначную цифру.
...
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2213510
kDn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g?oes to sleep
vad72  11.06.2020, 08:31
Она ценная только для меня, так как я использую её для выполнения своих непосредственных обязанностей - анализа и аудита компаний семи областей Украины. На основе этих данных акционеры принимают свои управленческие решения. Я просто у них инструмент для анализа. А мне для анализа нужен массив данных.
Вы гражданином какой страны являетесь и кто ваш работодатель. Интересует страна, а не имя.
Второй момент - можете ли вы каким-то образом подтвердить правдивость ваших слов, в случае если ответ на оба вопроса не является - РФ.
...
Дилинь Дилинь Дилинь 798413147632722479082280201[:frown][:grin2]
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2213540
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Акционеры из разных стран, я из Киева.
...
Изменено: 11.06.2020, 15:03 - vad72
Рейтинг: 0 / 0
замена букв на цифры в 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
замена букв на цифры в 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
замена букв на цифры в MS SQL
    #2213610
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree  11.06.2020, 15:20
Я знал бизнес, который так обанкротился.
я не против sap, просто мы не можем себе его позволить, если всё прибыль отдавать, то даже тогда мы не закроем расходы на sap. Раньше часть компаний было американскими. у которых "мировая" лицензия на sap (точно не знаю ,как она называется) и мы (часть компаний где сап) ничего не платили, так как оплату лицензий делала американская компания в рамках всех стран на планете земля. Мы там просто терялись, что мы есть, что нет, для них это не имело значение. Потом ,когда американцы продали акции, САП остался и что с ним делать? Мы не может самостоятельно осилить оплату его.
...
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2213679
kDn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g?oes to sleep
vad72  11.06.2020, 15:03
Акционеры из разных стран, я из Киева.
Ладно, буду предполагать, что вы не брешете. Поскольку я последние годы чутка злой на РФ и ни при каких обстоятельствах деловых отношений с этой страной иметь не хочу.

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

* Когда речь идет о модификации таблиц с мульярдами строк, то нужно понимать, что это будет крайне долго и затратно по логу. Следствие - возможно имеет смысл создать таблицу нужной структуры - слить туда данные неспешно, дальше грохнуть исходную, а целевую переименовать.
...
Дилинь Дилинь Дилинь 798413147632722479082280201[:frown][:grin2]
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2213703
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kDn  11.06.2020, 16:30
vad72  11.06.2020, 15:03
Акционеры из разных стран, я из Киева.
Ладно, буду предполагать, что вы не брешете. Поскольку я последние годы чутка злой на РФ и ни при каких обстоятельствах деловых отношений с этой страной иметь не хочу.

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

* Когда речь идет о модификации таблиц с мульярдами строк, то нужно понимать, что это будет крайне долго и затратно по логу. Следствие - возможно имеет смысл создать таблицу нужной структуры - слить туда данные неспешно, дальше грохнуть исходную, а целевую переименовать.
Ну, я не знаю, какой смысл еще одного поля, если можно преобразовать исходное в BIGINT, даже с возможностью выкрутить из него обратно начальное значение, если понадобится.
...
Рейтинг: 0 / 0
замена букв на цифры в 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
замена букв на цифры в MS SQL
    #2213748
kDn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g?oes to sleep
vad72  11.06.2020, 16:54
Ну, я не знаю, какой смысл еще одного поля, если можно преобразовать исходное в BIGINT, даже с возможностью выкрутить из него обратно начальное значение, если понадобится.
Это вообще разные вопросы. Если вам нужен источник - то сохраняете как есть (без преобразований) в отдельном поле. Если же источник - не нужен, можно не сохранять. Что же касается самого PK, то в случае если не хватает INT - можете изменить его на BIGINT, попутно не забыв поменять все связанные таблицы, либо можно оставить как есть, я ведь на 99% уверен, что у вас еще диапазон отрицательных значений в нем не освоен))). А RESEED при необходимости никто не отменял. Заниматься же преобразованием чего-то внешнего по загадочным законам - бред. Чем быстрее до вас это дойдет, тем меньше проблем огребете.
...
Дилинь Дилинь Дилинь 798413147632722479082280201[:frown][:grin2]
Рейтинг: 0 / 0
замена букв на цифры в 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
замена букв на цифры в MS SQL
    #2214750
KADETXXXIII
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kDn  11.06.2020, 16:30
Заниматься же преобразованием чего-то внешнего по загадочным законам - бред. Чем быстрее до вас это дойдет, тем меньше проблем огребете.
Тут не поспоришь.
Разве что, БД эта исключительно для моего личного пользования по работе. Просто я решил брать "первичные" данные к себе в БД, без изменений (просто пробиваю контрольные суммы где нужно) и тут у себя на месте делать различные отчеты для себя перед аудитом (в принципе, благодаря этим данным я и знаю, куда ехать и куда тыкать носом). Ну и внеплановые отчеты срочные для акционеров.
Можно было бы пойти другим путем, с мест просить присылать готовые отчеты, а потом их тут сбивать в один, как делают некоторые отделы, но это, я считаю, не эффективно.
...
Рейтинг: 0 / 0
замена букв на цифры в MS SQL
    #2214757
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree  11.06.2020, 18:15
Ему инта вполне хватит, у него 200 миллионов значений против 4 миллиардов.
Ещё на много-много лет хватит, а к тому времени он уже на пенсию уйдёт.
максимальное число там 199 999 889 612 349 , так что никак в INT
...
Рейтинг: 0 / 0
замена букв на цифры в 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
замена букв на цифры в MS SQL
    #2220685
vad72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SandalTree  12.06.2020, 14:11
Какая разница сколько там цифр, главное сколько там всего записей.
может я не верно озвучил ранее, тогда повторюсь, у меня импортируется не одна таблица, это поле не просто PK, по этому полю идет связь с другими таблицами, его нельзя тупо заменять на другой "автосчетчик".
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 2 из 3
Форумы / Вопросы по IT / замена букв на цифры в MS SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (7): Анонимы (5), Yandex Bot 5 мин., Bing Bot 9 мин.
Пользователи онлайн (10): Анонимы (8), Yandex Bot 2 мин., Bing Bot 5 мин.
x
x
Закрыть


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