我正在尝试从AS400数据库中选择具有当前日期的记录(格式为MMDDYY)。
这就是我打算做的事情:
SELECT * FROM tableName WHERE $DATE='030411'
我尝试了这种组合,但没有运气:
SELECT * FROM tableName WHERE $DATE='SELECT REPLACE(CONVERT(VARCHAR(10), GETDATE(), 1), '/', '')'
有什么建议吗?
答案 0 :(得分:3)
试试这个:
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上的SQL(iSeries,System i等)不会让您SELECT
凭空捏造。
另请注意,current date
可能会以不同的格式返回日期,具体取决于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 ********
答案 1 :(得分:2)
insert( replace( char( current_date, usa ) , '/', '' ) , 5, 2, '')
以上生成* USA格式的字符串表示[即对于使用MM/DD/YYYY
强制转换标量函数的当前日期CHAR
],然后使用{替换字符串MM/DD/YYYY
中的'/'字符和空字符串变为MMDDYYYY
{1}}标量函数,然后从位置5开始插入空字符串[即REPLACE
中YYYY
的第一个数字,同时删除该字符串的两个字节[即“insert”实际上是使用MMDDYYYY
标量函数替换第五个和第六个字节,或者根据插入标量从第五个(5)中的参数替换两(2)个字节,使用空字符串]产生字符串INSERT
的所需结果[其中最后两个字节MMDDYY
是YY
中表示为YYYY
的数字的10 ** 1和10 ** 0部分}]。
问候,查克
答案 2 :(得分:0)
030411 =
选择 子(更换(替换(转换(VARCHAR(10),GETDATE(), 101),'/',''),'/',''),1,4)+ 子(转换(VARCHAR(4),年(GETDATE()),101),3,2)
答案 3 :(得分:-1)
尝试以下步骤..
STRSQL
输入您的查询
PRESS F4
将你的游客放在“WHERE”前面
PRESS F4
在你的适当日期栏名前面放1个
HIT ENTER
如果你的专栏是数字的,没有报价E.G 1234而不是'1234'
HIT ENTER
你应该得到你的结果