SQL当前日期(AS400)

SQL当前日期(AS400),sql,date,ibm-midrange,Sql,Date,Ibm Midrange,我试图从AS400数据库中选择具有当前日期(格式为MMDDYY)的记录 这就是我计划做的: SELECT * FROM tableName WHERE $DATE='030411' 我尝试了这些组合,但没有成功: SELECT * FROM tableName WHERE $DATE='SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 1), '/', '')' 有什么建议吗?030411= 挑选 子字符串(Replace)(Replace)(co

我试图从AS400数据库中选择具有当前日期(格式为MMDDYY)的记录

这就是我计划做的:

SELECT * FROM tableName WHERE $DATE='030411'
我尝试了这些组合,但没有成功:

SELECT * FROM tableName WHERE $DATE='SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 1), '/', '')'

有什么建议吗?

030411=

挑选 子字符串(Replace)(Replace)(convert)(varchar(10),GETDATE(), 101), '/', ''), '/', ''),1,4)+ 子字符串(convert(varchar(4),year(GETDATE()),101),3,2)

试试这个:

SELECT * FROM tableName WHERE $DATE=
   substring(cast(current date as char(10)),6,2) || 
   substring(cast(current date as char(10)),9,2) || 
   substring(cast(current date as char(10)),3,2)
您可以看到此表达式返回的值如下所示:

select substring(cast(current date as char(10)),6,2) || 
   substring(cast(current date as char(10)),9,2) || 
   substring(cast(current date as char(10)),3,2)    
from sysibm.sysdummy1                                   
您必须使用
sysibm.sysdummy1
,因为AS/400(iSeries、System i等)上的SQL不允许您凭空选择

还请注意,
当前日期
可能会以不同的格式返回日期,具体取决于SQL日期格式。此代码应为*ISO格式(
YYYY-MM-DD

下面是我用来验证这个例程的一些SQL语句

create table dmclib.test2 ( $DATE decimal(6,0) ) ;

insert into dmclib.test2 values   
  (010111), (010211), (031011) ;

SELECT * FROM dmclib.test2                         
where $DATE =                                      
   substring(cast(current date as char(10)),6,2) ||
   substring(cast(current date as char(10)),9,2) ||
   substring(cast(current date as char(10)),3,2) ;
这是我得到的:

....+...                        
  $DATE                         
 31,011                         
********  End of data  ******** 
上面使用
CHAR
cast标量函数为当前日期生成*USA格式的字符串表示形式[即
MM/DD/YYYY
],然后使用
REPLACE
标量函数将字符串
MM/DD/YYYY
中的“/”字符替换为空字符串,变为
mmddyyyyy
,然后插入从位置5开始的空字符串[即
MMDDYYYY
YYYY
的第一位数字],同时删除该字符串的两个字节[即“insert”实际上是用空字符串替换第五个字节和第六个字节,或根据插入标量上的参数从第五(5)个字节替换两(2)个字节]使用
INSERT
标量函数,从而生成字符串
MMDDYY
[其中最后两个字节
YY
MM/DD/YYYY
中表示为
YYYY
的数字的10**1和10**0部分]

尊敬的Chuck请尝试以下步骤

  • STRSQL

  • 键入您的查询

  • 按F4

  • 将光标放在“WHERE”前面

  • 按F4

  • 在相应的日期列名称前加1

  • 按回车键

  • 如果您的列是数字,请给出不带引号的值,例如1234,而不是“1234”

  • 按回车键

  • 你应该得到你的结果


  • 不,这也不行。我知道这个日期字段的格式是MMDDYY您是收到错误消息还是没有返回任何行?如果您编写
    从sysibm.sysdummy1选择当前日期
    ,会返回什么?顺便说一句,如果
    从sysibm.sysdummy1选择当前日期
    不起作用,请将其作为
    从sysibm/sysdummy1选择当前日期
    (以防SQL会话使用*SYS命名约定)进行尝试,只需将select查询复制并运行到SQL server中。它应该返回MMDDYY格式的值。这个问题是针对AS/400的,而不是SQL Server。当我在AS400上执行这个问题时,它会说“GETDATE in*LIBL type*N not found”。这个问题需要澄清。每个表中的每一行实际上都有一个“当前日期”。当前日期是一个始终可用的特殊寄存器;它不是从列中物理检索的值。需要定义“当前日期”。和日期列没有格式。“MMDDYY”格式将来自连接或演示客户端上的设置。更改设置以获得不同的格式。我们需要知道连接的详细信息。但是,如果列实际上是CHAR、VARCHAR、DECIMAL或其他数据类型,而不是日期,那么我们也需要知道这一点。
    insert( replace( char( current_date, usa ) , '/', '' ) , 5, 2, '')