C# 在查询时防止[MEMNO]值中前面的零丢失?

C# 在查询时防止[MEMNO]值中前面的零丢失?,c#,sql,odbc,database-connection,ibm-midrange,C#,Sql,Odbc,Database Connection,Ibm Midrange,我在应用程序中使用了几个SQL语句。我注意到,当某些成员号码返回时,例如012345,它们返回为12345。此数字用于协助文件命名约定,并且根据某些其他标准,需要采用6位格式才能正确处理文件 有人能帮我吗?切断源于查询IBMAS400系统。有人建议使用DIGITS函数,但我尚未将其用于以下示例查询: SELECT DISTINCT DIGITS(a.memno), a.name, a.addr1, a.addr2, a.city, a.state, a.zip, a.sex, a

我在应用程序中使用了几个SQL语句。我注意到,当某些成员号码返回时,例如012345,它们返回为12345。此数字用于协助文件命名约定,并且根据某些其他标准,需要采用6位格式才能正确处理文件

有人能帮我吗?切断源于查询IBMAS400系统。有人建议使用DIGITS函数,但我尚未将其用于以下示例查询:

SELECT DISTINCT DIGITS(a.memno), 
a.name, 
a.addr1, 
a.addr2, 
a.city, 
a.state, 
a.zip, 
a.sex, 
a.lname, 
a.ssan, 
b.addr1 as old_addr1, 
b.addr2 as old_addr2, 
b.city as old_city, 
b.state as old_state, 
b.zip as old_zip, 
'P' as SYS 
FROM Lib1.Table1 a, Lib1.Table2 b 
WHERE a.memno = b.memno and 
      b.groupid = 'P2' and  
      b.type = 'B' and  
      b.rcchg <> 'N' and  
      b.datec = 20140107  
      AND (UPPER(a.addr1) <> UPPER(b.addr1) or UPPER(a.addr2) <> UPPER(b.addr2) or UPPER(a.city) <> UPPER(b.city) or UPPER(a.state) <> UPPER(b.state) or UPPER(a.zip) <> UPPER(b.zip)) 
UNION SELECT DISTINCT 
DIGITS(a.memno), 
a.name, 
a.addr1, 
a.addr2, 
a.city, 
a.state, 
a.zip, 
a.sex, 
a.lname, 
a.ssan, 
b.addr1 as old_addr1, 
b.addr2 as old_addr2, 
b.city as old_city, 
b.state as old_state, 
b.zip as old_zip, 
'N' as SYS 
FROM Lib2.Table1 a, Lib2.Table2 b 
WHERE a.memno = b.memno and  
      b.groupid = 'N2' and  
      b.type = 'B' and  
      b.rcchg <> 'N' and  
      b.datec = 20140107 AND (UPPER(a.addr1) <> UPPER(b.addr1) or UPPER(a.addr2) <> UPPER(b.addr2) or UPPER(a.city) <> UPPER(b.city) or UPPER(a.state) <> UPPER(b.state) or UPPER(a.zip) <> UPPER(b.zip)) 
ORDER BY sys, memno asc
此查询在ODBC连接上使用ODBC命令通过我的C应用程序发送。

请尝试列号:

ORDER BY 16, 1 asc
编辑:添加支持背景信息

第一列未命名,因为它是函数的结果

最后一个表的第一列未命名,因为第一个SELECT中的column1未命名。 由于该列未命名,因此不能包含在ORDER BY中

因此,除了ORDER BY 1 asc之外,您还可以将第一个SELECT更改为

选择DISTINCT DIGITSa.memno作为memno, ... 按sys订购,memno

通过在第一个SELECT中为列指定名称,结果表列将具有名称

请尝试列编号:

ORDER BY 16, 1 asc
编辑:添加支持背景信息

第一列未命名,因为它是函数的结果

最后一个表的第一列未命名,因为第一个SELECT中的column1未命名。 由于该列未命名,因此不能包含在ORDER BY中

因此,除了ORDER BY 1 asc之外,您还可以将第一个SELECT更改为

选择DISTINCT DIGITSa.memno作为memno, ... 按sys订购,memno

通过在第一个SELECT中为列指定名称,结果表列将具有名称


请参阅我的编辑。不确定您是如何在IBMi端运行SQL的,或者您运行的是什么版本的DB2fori,或者您使用的是什么版本的ODBC驱动程序。很明显他们之间有区别。好的,谢谢你,巴克!这是可行的,但我也注意到服务器资源管理器一直试图将我的DIGITSa.memno重命名为Expr1,因此通过将其设置为DIGITSa.memno为memno,即使按sys、memno、asc的顺序,一切都正常运行。再次感谢你的帮助!请参阅我的编辑。不确定您是如何在IBMi端运行SQL的,或者您运行的是什么版本的DB2fori,或者您使用的是什么版本的ODBC驱动程序。很明显他们之间有区别。好的,谢谢你,巴克!这是可行的,但我也注意到服务器资源管理器一直试图将我的DIGITSa.memno重命名为Expr1,因此通过将其设置为DIGITSa.memno为memno,即使按sys、memno、asc的顺序,一切都正常运行。再次感谢你的帮助!