Bra*_*rad 0 php oracle codeigniter
从表格中检索日期范围之间的项目.
日期(db表字段名称调用:submission_date)作为dMy存储在数据库中(例如:21-Dec-10)
它以sysdate的形式存储在oracle数据库中.(它需要以该格式保留在数据库中,因此不能选择更改其存储方式的格式)
我想将21-Dec-10转换为20101221,所以我可以将它与用户发布的日期进行比较,这是两个值,end_date,begin_date
我只需要将submission_date正确转换为Ymd(20101221)
以下是理论上我想做的事情:
select
*
from
table
where
(convert(Ymd=>submission_date) >= $begin_date
AND
convert(Ymd=>submission_date) <= $end_date)
Run Code Online (Sandbox Code Playgroud)
如果列submission_date是DATE数据类型而$ begin_date和$ end_date是yyyymmdd格式的字符串,那么您可以使用以下查询来检索落在日期范围之间的行:
SELECT *
FROM tab
WHERE submission_date BETWEEN
TO_DATE ( $begin_date, 'yyyymmdd') AND
TO_DATE ( $end_date, 'yyyymmdd');
Run Code Online (Sandbox Code Playgroud)
通过不在 submission_date上应用函数,如果索引存在,我们给Oracle一个机会在该列上使用索引.
当你说,
它以sysdate的形式存储在oracle数据库中.
对我来说,该列的数据类型是DATE.
首先,让我们消除DATE存储在Oracle内部的String FORMAT中的概念.这完全是错误的.
如果列的数据类型为DATE,则实际值使用7bytes存储,但可以将其视为数字.当您查询它以检查值时,您会看到dd-mon-yy格式是NLS设置或客户端选项的函数.记住Oracle是一个服务器,任何让你查看存储在那里的信息的工具都有一个访问该信息的门户.换句话说,你并没有真正关注数据,你正在查看已经获得数据的内容,然后将其放在屏幕上供您查看.合理?
好吧,现在您知道没有DATE以某种格式存储的东西,DATE MATH变得简单.
SELECT Submission_date FROM tab
Run Code Online (Sandbox Code Playgroud)
返回基于客户端设置或NLS设置格式化为字符串的日期.
SELECT Submission_date - 1 FROM tab
Run Code Online (Sandbox Code Playgroud)
返回一天前的同一时间的日期
请注意,我没有必要对数字1做疯狂的事情来执行日期数学,这是因为日期数据类型支持数学处理,就像它是一个数字,所以减法是一件简单的事情.
如果$ begin_date的变量作为日期传递给Oracle,那么它们也不需要对它们做任何事情,因为它们可以像数字一样使用.
在哪里Submission_date BETWEEN $ Begin和$ End将起作用.
BETWEEN包含两端.
日期实际上存储如下:
Byte 1 -> Century
Byte 2 -> Year
Byte 3 -> Month
Byte 4 -> Day
Byte 5 -> Hour
Byte 6 -> Minute
Byte 7 -> Second
Run Code Online (Sandbox Code Playgroud)
这允许支持极其广泛的日期范围.它实际上是日期数学库,可以使该数据类型做一些很酷的事情,如添加闰年并获得从Julian到Gregorian等的转换.
SQL Server将日期存储为两个4字节整数一起打包到BINARY(8)中.前4个字节是自SQL Server基准日期1/1/1900起经过的天数.第二个4字节存储时间表示为午夜后的毫秒数,其量子为3.33毫秒.
假设可以存储值,RDBMS支持它是错误的.我相信SQL Server根本不处理BC日期,也不会处理未来999年的日期.MSSS2008确实引入了一种新的数据类型来处理这些大日期.
| 归档时间: |
|
| 查看次数: |
573 次 |
| 最近记录: |