[英]SQL Current date (AS400)
我正在尝试从AS400数据库中选择具有当前日期的记录(格式为MMDDYY)。
这是我计划要做的:
SELECT * FROM tableName WHERE $DATE='030411'
我尝试了这种组合,但没有运气:
SELECT * FROM tableName WHERE $DATE='SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 1), '/', '')'
有什么建议么?
尝试这个:
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不允许您凭空SELECT
值。
另请注意,根据SQL日期格式, current date
可能会使日期以其他格式返回。 该代码期望它采用* 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 ********
insert( replace( char( current_date, usa ) , '/', '' ) , 5, 2, '')
上面的代码使用CHAR
强制转换标量函数为当前日期生成* USA格式的字符串表示形式[即MM/DD/YYYY
],然后将MM/DD/YYYY
字符串中的'/'字符替换为空字符串使用REPLACE
标量函数成为MMDDYYYY
,然后插入从位置5开始的空字符串[即MMDDYYYY
中YYYY
的第一位],同时删除该字符串的两个字节[即“插入”实际上是在替换第五和第六个字节,或根据第五个(5)的插入标量中的参数起两(2)个字节,并使用INSERT
标量函数使用空字符串],从而产生字符串MMDDYY
[其中最后两个字节YY
为数字的10 ** 1和10 ** 0部分,以MM/DD/YYYY
表示为YYYY
。
问候,查克
030411 =
选择子串(Replace(Replace(convert(varchar(10),GETDATE(),101),'/',''),'/',''),1,4)+ substring(convert(varchar(4) ,年(GETDATE()),101),3,2)
请尝试以下步骤。
STRSQL
输入您的查询
按F4
将光标放在“ WHERE”的前面
按F4
在您的适当日期列名称前输入1
点击进入
如果您的栏位是数字赋值,而不是EG 1234而不是'1234'
点击进入
您应该获得结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.