ahmed_sa Ответов: 1

Ошибка запроса ниже не смог преобразования при преобразовании в int 5/1


problem

error on query below conversion fails when converting 5/1 to int

<pre lang="CSS">DataSample

SpecialCode   expr1   EXPR2
000151/1      000151    1
000151/2      000151    2
000151/3      000151    3
006495/1      006495    1
006495/2      006495    2




данные выше не имеют никаких проблем, но я делаю это, чтобы показать, что запрос делает

но ошибка выше может возникнуть на данных expr1 и EXPR2 при преобразовании в целое число

Так что

1 - что я изменяю по запросу, чтобы избежать отображения этой ошибки, потому что больше использовать написать специальный код неправильно и сохранить его неправильно ?

2-почему происходит эта ошибка и случаи, которые делают эту ошибку ?

Что я уже пробовал:

Query sql server 2014 as below :

SELECT  FirstPrintCardFooter.FooterNotes,
FirstPrintCardFooter.PrintFlag,   dbo.VMainMembers.TransactionNo,
dbo.VMainMembers.PaymentDate,   
dbo.Members.MemberCode,MSRelation.MSRelationName,MSRelation.MSRelationId, 
dbo.Members.SpecialCode, dbo.Members.Name,dbo.Members.RelatedMemberCode,MemberImage,VMainMembers.totalcredit,
CAST(CAST(LEFT(dbo.Members.SpecialCode, CHARINDEX('/', dbo.Members.SpecialCode + '/') - 1) AS nvarchar) AS int) AS expr1 ,
CAST(CAST(substring(dbo.Members.SpecialCode, CHARINDEX('/', dbo.Members.SpecialCode)+1 , len(dbo.Members.SpecialCode) - CHARINDEX('/', dbo.Members.SpecialCode)) AS nvarchar) AS int) AS EXPR2 
        
FROM            dbo.Members left join MSRelation on Members.MSRelation=MSRelation.MSRelationId 
LEFT JOIN       dbo.VMainMembers 
ON SUBSTRING(dbo.Members.SpecialCode, 0, CHARINDEX('/', dbo.Members.SpecialCode, 0))=SUBSTRING(dbo.VMainMembers.SpecialCode, 0, CHARINDEX('/', dbo.VMainMembers.SpecialCode, 0)) 						
LEFT JOIN FirstPrintCardFooter 
ON MEMBERS.MemberCode = FirstPrintCardFooter.MemberCode
AND  dbo.VMainMembers.[Year] = FirstPrintCardFooter.TrxYear
WHERE FirstPrintCardFooter.MemberCode IS  NULL    
and dbo.VMainMembers.TransactionNo is not null  and VMainMembers.Year=2018 order by expr1 ,EXPR2

1 Ответов

Рейтинг:
0

OriginalGriff

Если я извлеку ваш код для проверки и использую ваши образцы данных:

DECLARE @SpecialCode NVARCHAR(MAX);
SET @SpecialCode = '000151/1'
SELECT CAST(CAST(LEFT(@SpecialCode, CHARINDEX('/', @SpecialCode + '/') - 1) AS nvarchar) AS int) AS expr1,
CAST(CAST(substring(@SpecialCode, CHARINDEX('/', @SpecialCode)+1 , len(@SpecialCode) - CHARINDEX('/', @SpecialCode)) AS nvarchar) AS int) AS EXPR2,
SUBSTRING(@SpecialCode, 0, CHARINDEX('/', @SpecialCode, 0)),
SUBSTRING(@SpecialCode, 0, CHARINDEX('/', @SpecialCode, 0))
Тогда это работает: я получаю ошибки nop:
expr1   EXPR2   (No column name)   (No column name)
151     1       000151             000151
Таким образом, на первый взгляд, в вашей таблице есть данные, которые не соответствуют шаблону предоставленных вами данных.

Вернитесь в свою базу данных и проверьте содержимое ваших пользователей.Специальный код очень тщательно - я подозреваю, что там есть плохие данные!


ahmed_sa

Хорошо спасибо это сработало

OriginalGriff

Всегда пожалуйста!