Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Добрый день. Получается у меня ошибка в запросе, просто уже не могу понять в чем дело/, казалось бы всё очень просто: есть у меня две таблицы и нужно мигрировать данные из одного поля (символьный тип) в другое (numeric(10,3)), причем буквально перед выполнением миграции изменил тип получателя с int на numeric(10,3), миграцию делается по 3 кодам Код: sql 1. 2. 3. так вот при выполнении запроса ошибка Сообщение 245, уровень 16, состояние 1, строка 1 Conversion failed when converting the varchar value '39.3' to data type int. такое впечатление, что система запомнила, что ранее та был тип int ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:02 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
patrick1968, Злопамятная какая... int старше varchar по этому прифодит к нему. что вы этим хотите получить не понятно RTRIM(replace(r.field11,',','.')) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:05 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
я так понимаю вам это надо THEN '0' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:08 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
field11 - char поэтому RTRIM - в этой строке может быть что угодно, только вашего ответа не понял, что значит int старше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:10 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
TaPaKя так понимаю вам это надо THEN '0' подозреваю, что n.pw имеет тип numeric(10,3) и поэтому скорее надо RTRIM(replace(r.field11,',','.')) приводить к numeric ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:11 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
да если не распознано, значит 0 в противном случае число ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:12 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
ПосетительTaPaKя так понимаю вам это надо THEN '0' подозреваю, что n.pw имеет тип numeric(10,3) и поэтому скорее надо RTRIM(replace(r.field11,',','.')) приводить к numeric та может, во всём тексте нет названия колонки которую он менял :) Но при этом даже оставив '0' всё равно будет пытаться скрафтить numeric. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:12 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
patrick1968да если не распознано, значит 0 в противном случае число новых символов не заметили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:13 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
да и к numeric приводил тоже - не помогло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:13 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
patrick1968, Вы хотите сказать, что у Вас столбец pw был формата int и строка "39.3" в него не входила, а теперь Вы сделали его в формате numeric(10,3) и ожидаете, что явное присванивание текста "39.3", который получается из текста "39,3" - пройдет успешно?? set n.pw = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN 0 ELSE RTRIM(replace(r.field11,',','.')) END Сделайте так. Отделите рубли от копеек, 39*100+3, получите явно int, а затем записываете set n.pw = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN convert(numeric(10,3),0) ELSE convert(numeric(10,3), convert(double, convert(int,'рубли из поля r.field11')*100+convert(int,'копейки из поля r.field11'))/convert(double,100)) END Как отделить рубли от копеек - надеюсь, понятно, берете запятую и все, что слева - рубли, все, что справа - копейки, если одна цифра, умножаете на 10, то есть 39,3 - это не 3 копейки, а 30 копеек. Понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:14 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP, Ржал аки конь, таким только детей пугать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:15 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPpatrick1968, Вы хотите сказать, что у Вас столбец pw был формата int и строка "39.3" в него не входила, а теперь Вы сделали его в формате numeric(10,3) и ожидаете, что явное присванивание текста "39.3", который получается из текста "39,3" - пройдет успешно?? set n.pw = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN 0 ELSE RTRIM(replace(r.field11,',','.')) END Сделайте так. Отделите рубли от копеек, 39*100+3, получите явно int, а затем записываете set n.pw = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN convert(numeric(10,3),0) ELSE convert(numeric(10,3), convert(double, convert(int,'рубли из поля r.field11')*100+convert(int,'копейки из поля r.field11'))/convert(double,100)) END Как отделить рубли от копеек - надеюсь, понятно, берете запятую и все, что слева - рубли, все, что справа - копейки, если одна цифра, умножаете на 10, то есть 39,3 - это не 3 копейки, а 30 копеек. Понятно? вы там на своем как бы радио как бы совсем уже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:15 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
patrick1968да и к numeric приводил тоже - не помогло совсем других символов не видите?? напишите тогда так WHEN ISNUMERIC(r.field11) <> 1 THEN 0.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:16 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
TaPaKAndy_OLAP, Ржал аки конь, таким только детей пугать Я не понимаю, в чем причина юмора, я же не предлагаю автору темы готовое решение, я предлагаю ему подумать над проблемой глубже и со стороны и показывают путь размышлений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:16 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPTaPaKAndy_OLAP, Ржал аки конь, таким только детей пугать Я не понимаю, в чем причина юмора, я же не предлагаю автору темы готовое решение, я предлагаю ему подумать над проблемой глубже и со стороны и показывают путь размышлений. вы предлагаете взглянуть на гланды через анус. так то оно конечно понятнее, но далеко не всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:19 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
а так Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:19 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPTaPaKAndy_OLAP, Ржал аки конь, таким только детей пугать Я не понимаю, в чем причина юмора, я же не предлагаю автору темы готовое решение, я предлагаю ему подумать над проблемой глубже и со стороны и показывают путь размышлений. вы генерируете бред, основанный на ваших личных ассоциациях, абсолютно не связанных с вопросами. 1. Ошибка varchar value '39.3' to data type int. 2. Тип поля numeric(10,3) откуда, то стойло что вы в кейсе настучали? Ошибка возникает из за того что CASE всё приводит к старшему типу. Старший тип тит int из-за 0. Привести все WHEN к одному вот и всё решение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:21 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Посетительвы предлагаете взглянуть на гланды через анус. Я предлагаю искать любой разделитель между рублями и копейками , получать сумму в копейках - которая может вылезти за пределы int, затем делить обратно на 100 и приводить к numeric(10,3). Я предлагаю автору темы подумать над тем, что все replace явно завязаны на предположение , что софт, работающий с таблицей, будет всегда в varchar столбцы записывать суммы с разделителем в виде запятой. А софт с какого-то момента может обновиться, и половина записей будет с одним разделителем, половина записей с другим. Так более понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:28 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Andy_OLAPПосетительвы предлагаете взглянуть на гланды через анус. Я предлагаю искать любой разделитель между рублями и копейками , получать сумму в копейках - которая может вылезти за пределы int, затем делить обратно на 100 и приводить к numeric(10,3). Я предлагаю автору темы подумать над тем, что все replace явно завязаны на предположение , что софт, работающий с таблицей, будет всегда в varchar столбцы записывать суммы с разделителем в виде запятой. А софт с какого-то момента может обновиться, и половина записей будет с одним разделителем, половина записей с другим. Так более понятно? ага, любой разделитель авторКак отделить рубли от копеек - надеюсь, понятно, берете запятую и все, что слева - рубли, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:30 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
update n set n.eim = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN 0.0 ELSE CAST(LTRIM(RTRIM(REPLACE(r.field11,',','.'))) as numeric(10,3)) END FROM [DNRR].[dbo].[res1] r inner join [DNRR_test2].[dbo].[rich_] n on n.field4 = r.ndoc and n.field5 = r.ddoc and n.resid = r.resid И даже в таком исполнении результат такой же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:31 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
patrick1968update n set n.eim = CASE WHEN ISNUMERIC(r.field11) <> 1 THEN 0.0 ELSE CAST(LTRIM(RTRIM(REPLACE(r.field11,',','.'))) as numeric(10,3)) END FROM [DNRR].[dbo].[res1] r inner join [DNRR_test2].[dbo].[rich_] n on n.field4 = r.ndoc and n.field5 = r.ddoc and n.resid = r.resid И даже в таком исполнении результат такой же тот же это какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:32 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
+ объект ошибки. Может там триггер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:34 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
Error converting data type varchar to numeric. Триггеров там нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:37 |
|
||
|
Ошибка при выполнении запроса
|
|||
|---|---|---|---|
|
#18+
я уже и поле поменял, там есть такого же типа, просто уже в тупике ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2018, 16:39 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39707794&tid=1689051]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 262ms |
| total: | 448ms |

| 0 / 0 |
