Tsql 转换前导零的修剪

Tsql 转换前导零的修剪,tsql,Tsql,你会认为这两个都会带来相同的结果。但这不是因为转换正在修剪2个零,因此第2个在比较446641和446641时不会返回结果 select memberID, Photo as PhotoBlob from SomeTable WHERE memberId = '00446641' Select memberID, Photo as PhotoBlob from SomeTable WHERE memberId = conve

你会认为这两个都会带来相同的结果。但这不是因为转换正在修剪2个零,因此第2个在比较446641和446641时不会返回结果

select memberID, 
            Photo as PhotoBlob 
    from    SomeTable
WHERE memberId = '00446641'

Select  memberID, 
        Photo as PhotoBlob 
from    SomeTable
WHERE memberId = convert(char(13), 00446641) - this is trimming off the 2 zeros
memberID由于某种奇怪的原因不是int,而是该表中的char(13)

更新

以下是上下文:

public static MemberPhoto RetrieveMemberPhotoFromBlob(Int64 contractNumber)
{
    Database db = DatabaseFactory.CreateDatabase(Config.DbConnectionString_MemberPhotos);

    using ( DbCommand cmd = db.GetSqlStringCommand(string.Format(@" Select  memberID, 
                                                                            Photo as PhotoBlob 
                                                                    from    SomeTable
                                                                    WHERE memberId = convert(char(13), @{0})","memberID")))
    {
        try
        {
            db.AddInParameter(cmd, "@contractNumber", DbType.Int64, contractNumber);
根据请求


如果字符(13)字段包含有意义的前导/尾随0,则不能在UI代码中使用整数表示该字段。这是一个字符字段。这不是一个整型字段。在模型中使用字符串。这是一个有点经典的错误,比如试图使用int来表示电话号码。你就是做不到——有些人可能会在电话号码前加上一个前导0,电话号码以0结尾,等等

除了显而易见的答案,“不要使用
转换
,而是使用一对单引号(
'00446641'
)”,或者你可以将另一端转换为int-但我猜你也不想这样,因为听起来“00446641”与“0446641”是不同的值-唯一的选择是在它后面附加零…但是你的问题不包含一个有效的答案吗?用引号将字符串括起来,您将保留引号之间的所有内容。我可以问一下,既然第一种方法有效,您为什么还要转换吗?对不起,但仍然不清楚。如果该值以整数形式发送,您认为它到达时是否填充了零,然后去掉前导零?