2015-08-14 4 views
0

Ошибка преобразования типа данных VARCHAR в цифровойТип ошибки преобразования данных VARCHAR в цифровой и VARCHAR к DateTime

Превращение символьного типа данных в тип данных даты и времени привело к значению даты и времени вне-диапазона.

declare @rsnMain numeric, @rsnAcnt numeric, @rsnRel numeric; 
set @rsnMain = (select max(record_serial_number) 
       from sdg_aaismain) 
set @rsnAcnt = (select max(record_serial_number) 
       from sdg_aaisacnt) 
set @rsnRel = (select max(record_serial_number) 
       from sdg_aaisrel) 

insert into sdg_aaismain 
(RECORD_SERIAL_NUMBER, 
AGENT_NUMBER, 
AGENT_STATUS_CODE, 
AGENT_STATUS_DESP, 
TRADE_NAME, 
GROUP_TYPE_1, 
MADE_ON_BEHALF, 
MADE_ON_BEHALF_DESP, 
LICENSE_RENEWAL_CODE, 
LICENSE_RENEW_DESP, 
ACTUAL_NO_STREET, 
ACTUAL_TOWN, 
ACTUAL_STATE, 
ZIP_CODE_PREFIX, 
ZIP_CODE_SUFFIX, 
CITY_CODE, 
DISTRICT_CODE, 
COUNTY_CODE, 
MUNICIPALITY_CODE, 
ACTUAL_DISTRICT, 
ACTUAL_COUNTY, 
ACTUAL_MUNICIPALITY, 
CONTACT_LAST_NAME, 
CONTACT_FIRST_NAME, 
STORE_OPEN_HOURS#1, 
STORE_OPEN_HOURS#2, 
STORE_OPEN_HOURS#3, 
STORE_OPEN_HOURS#4, 
STORE_OPEN_HOURS#5, 
STORE_OPEN_HOURS#6, 
STORE_OPEN_HOURS#7, 
STORE_CLOSE_HOURS#1, 
STORE_CLOSE_HOURS#2, 
STORE_CLOSE_HOURS#3, 
STORE_CLOSE_HOURS#4, 
STORE_CLOSE_HOURS#5, 
STORE_CLOSE_HOURS#6, 
STORE_CLOSE_HOURS#7, 
MAILING_ADDRESS, 
MAILING_CITY, 
MAILING_STATE, 
MAILING_ZIP_CODE_PREFIX, 
MAILING_ZIP_CODE_SUFFIX, 
CREATE_DATE, 
MODIFY_DATE, 
MODIFY_TIME, 
USER_ID, 
AGENT_TYPE, 
NAIC_CODE, 
CONTRACT_TYPE, 
LONGITUDE, 
LATITUDE, 
CORP_NAME, 
DSR, 
FEDTAX_NAME, 
FEDTAX_ID, 
TIN_TYPE, 
NAME_CNTL, 
ES_GROUPTYPE, 
ADDRESS2, 
--CORPORATION_NUMBER) 
INSTALL_DATE) 

select 
@rsnMain + ROW_NUMBER() over (order by agent_number), 
AGENT_NUMBER, 
AGENT_STATUS_CODE, 
AGENT_STATUS_DESC, 
TRADE_NAME, 
cast(right(CHAIN_PARENT_RETAIL_NO,3) as numeric(3,0)) as GROUP_TYPE_1, 
MADE_ON_BEHALF, 
MOB_DESC, 
LICENSE_RENEWAL_CODE, 
RENEWAL_STATUS_DESC, 
ACTUAL_NO_STREET, 
ACTUAL_TOWN, ACTUAL_STATE, 
cast(ZIP_PREFIX as numeric (5,0)) as ZIP_PREFIX, 
cast(ZIP_SUFFIX as numeric (4,0)) as ZIP_SUFFIX, 
CITY_CODE, 
cast(DISTRICT_CODE as numeric (3,0)) as DISTRICT_CODE, 
cast(COUNTY_CODE as numeric(3,0)) as COUNTY_CODE, 
MUNICIPALITY_CODE, 
ACTUAL_DISTRICT, 
ACTUAL_COUNTY, 
ACTUAL_MUNICIPALITY, 
CONTACT_LAST_NAME, 
CONTACT_FIRST_NAME, 
STORE_OPEN_HOURS#1, 
STORE_OPEN_HOURS#2, 
STORE_OPEN_HOURS#3, 
STORE_OPEN_HOURS#4, 
STORE_OPEN_HOURS#5, 
STORE_OPEN_HOURS#6, 
STORE_OPEN_HOURS#7, 
STORE_CLOSE_HOURS#1, 
STORE_CLOSE_HOURS#2, 
STORE_CLOSE_HOURS#3, 
STORE_CLOSE_HOURS#4, 
STORE_CLOSE_HOURS#5, 
STORE_CLOSE_HOURS#6, 
STORE_CLOSE_HOURS#7, 
MAILING_ADDRESS, 
MAILING_CITY, 
MAILING_STATE, 
cast(MAIL_ZIP_PREFIX as numeric (5,0)) as MAIL_ZIP_PREFIX, 
cast(MAIL_ZIP_SUFFIX as numeric (4,0)) as MAIL_ZIP_SUFFIX, 
convert(datetime, CREATE_DATE) as CREATE_DATE, 
convert(datetime, GetDate()) as MODIFY_DATE, 
replace(Convert (varchar(8), GetDate(), 108),':','') as MODIFY_TIME, 
'DAILY UPDATE', 
AGENT_TYPE, 
NAIC_CODE, 
cast(CONTRACT_TYPE as numeric (1,0)) as CONTRACT_TYPE, 
LONGITUDE, 
LATITUDE, 
CORP_NAME, 
DSR, 
FEDTAX_NAME, 
FEDTAX_ID, 
TIN_TYPE, 
NAME_CONTROL, 
cast(ES_GROUPTYPE as numeric (6,0)) as ES_GROUPTYPE, 
ADDRESS2, 
--cast(CORPORATION_NUMBER as numeric (11,0)), 
convert(datetime, INSTALL_date) 
from sdg_tmp_aaismain as tmp 
where NOT EXISTS(select NULL 
       from sdg_aaismain as dest 
       where tmp.agent_number = dest.agent_number 
       ) 

Приведенный выше код является образцом более длительного заявления о обновлении. У меня есть 2 столбца, которые дают мне ошибку «Ошибка преобразования данных varchar в числовую». Это связано с тем, что для некоторых записей есть символьные данные.

Ошибка вне диапазона для 4 разных столбцов varchar с датами, для которых все значения «00000000» являются значениями для некоторых строк.

Как я могу исключить данные символа и нули из моего запроса на выбор?

Спасибо, Скотт

+0

У одной из столбцов, с которыми я столкнулся, является CORPORATION_NUMBER. Я попытался добавить следующий код в мой оператор select и получить эту ошибку: Subquery вернул более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, <= , >,> = или когда подзапрос используется как выражение. (выбрать бросок (tmp.CORPORATION_NUMBER в числовом (11,0)) в качестве CORPORATION_NUMBER из sdg_tmp_aaismain TMP где tmp.CORPORATION_NUMBER не в ('', '0', '00000000000') и tmp.CORPORATION_NUMBER не нравится «% [az, AZ, /, \, - ,.]% ') – Scottdg

ответ

0

Если вы хотите исключить строку целиком, то вы можете сделать:

WHERE ISDATE(someColumn)=1 

Если вы хотите включить в строку, но вбить нуль в дату вы можете do:

INSERT INTO someTable (datecolumn) 
SELECT CASE WHEN ISDATE(someColumn)=1 THEN CONVERT(DATETIME,someColumn) ELSE NULL END 
FROM someOtherTable 
+0

Я попробовал это для CORPORATION _NUMBER в конце моего оператора select, используя следующее: (выберите случай, когда CORPORATION_NUMBER не в (' ',' 0 ',' 00000000000 ',' nul '), затем конвертировать (numeric, corporation_number) else null конец из sdg_tmp_aaismain) ..... Все эти столбцы позволяют NULLS. Я не уверен, почему некоторые из них имеют строку 'nul'. Я все еще получаю ошибку, конвертирующую varchar в числовую. – Scottdg

+0

Если вы делаете численные значения, вы можете сделать 'isnumeric (somecolumn) = 1' вместо' isdate (somecolumn) = 1', а не жесткое кодирование списка. – JiggsJedi

Смежные вопросы