大家好,今天小编来为大家解答以下的问题,关于数据库时间戳,oracle数据库时间戳类型这个很多人还不知道,现在让我们一起来看看吧!
本文目录
一、数据库中当前 *** 日期的表达式是什么
显示的格式:年-月-日小时:分钟:秒
d-几日,二位数字,若不足二位则前面补零;如:"01"至"31"
D-星期几,三个英文字母;如:"Fri"
h-12小时制的小时;如:"01"至"12"
H-24小时制的小时;如:"00"至"23"
g-12小时制的小时,不足二位不补零;如:"1"至12"
G-24小时制的小时,不足二位不补零;如:"0"至"23"
j-几日,二位数字,若不足二位不补零;如:"1"至"31"
l-星期几,英文全名;如:"Friday"
m-月份,二位数字,若不足二位则在前面补零;如:"01"至"12"
n-月份,二位数字,若不足二位则不补零;如:"1"至"12"
S-字尾加英文序数,二个英文字母;如:"th","nd"
t-指定月份的天数;如:"28"至"31"
w-数字型的星期几,如:"0"(星期日)至"6"(星期六)
z-一年中的第几天;如:"0"至"365"
可以 *** 设定显示的内容,连接符号或是显示位置,例如date("m-dH")或者date("dmY");?>等
加入时间:2004-12-1817:35:22大小:12KB阅读次数:1405
转贴:xiaxia日期:2004-05-26人气:9
我正打算用PHP编写一种帮助处理 *** 。我发现我必须知道处理完最后一位客户的问题后已经过去了多长时间?当我过去用ASP时解决这个问题相当简单,ASP有相应的函数DateDiff可以给出两个日期间间隔多少月、多少天和多少秒。当我搜寻完PHP手册后我发现PHP并没有类似的函数。
1、得到目前的日期和时间-我们有多少种方式?
2、改变日期显示的方式-日期和时间的显示形式
3、转换现在的日期为Unix的时间戳值
在Unix中,时间的表示方式为计算从1970年1月1日零时起所过去的秒数,这称为UNIX时间戳(UnixEpoch)。
而此时的时间为2000年5月21日12时43分。
你也许会说这相当不错。当这对我毫无帮助,或者只有一点帮助。在PHP中,对日期处理的函数都必须用到由time()返回的时间戳值。同时,由于PHP在Unix和Windows *** 中均使用同样的时间戳值,这就允许你不需要修改代码即可在不同的 *** 间移植。另外的一个好处是time()函数返回的是一个整数,你可以将其作为整数字段或文本字段存入数据库,而不必使用特别的日期/时间字段。
你已经基本了解了Unix的时间戳值,现在让我们来展示它的实际用途。
改变日期显示的方式-日期和时间的显示形式
PHP提供两个办法来将Unix的时间戳值转换成为有用的数据。之一个是date()函数。这个函数有两个参数-之一个字符串用于设定你所希望返回的格式,第二个为Unix的时间戳值。
格式化字符串通过一些简单的特殊格式化字符来显示你所希望看到的格式的日期和时间。假设你希望日期以这样的格式显示“18h01Sunday21May”。
我们需要对字符串中的每一部分使用一个特殊格式化字符,你可以从PHP手册中日期和时间函数库中找到。这样的特殊格式化字符数量不少,他们所表示的类似于星期几、月的英文名、用2位或4位数表示的年份,是否是上午(AM)或下午(PM)以及其他。对于这个例子我们需要的特殊字符为:
因此我们的格式化字符串为”HhildF”,PHP代码为:
当我们执行这段代码,我们发现我们所得到的结果为:
这样的结果看起来有些奇怪。让我们再查一下PHP手册,原来’h’所 *** 的是12小时制的小时数。这再次证明了一句真理:“计算机只做你所告诉它该做的,而不是你想要它做的”。我们有两个选择。之一个是在h前使用转义字符“”:
这正是我们所要的。但如果我们在一个十分复杂的句子中需要包含日期和时间,我们是否需要对每个字符使用转义字符?
*** 当然是不。我们使用另一个函数strftime()。
strftime()有两个好处。之一个好处我们并不在本文讨论范围内-如果你使用setlocale()函数,你可以通过strftime得到相应语言的月份的名称。另外的一个好处是你可以将特别的日期和时间的格式化字符包含在你的字符串中。这同时也意味着无论你是否要学习date()函数的所有特殊格式化字符,你都必须学习一整套完全不同的格式化字符。
strftime()工作的方式和date()没有什么不同,除了特殊格式化字符的前面必须添加一个百分号%。如果用strftime()函数,前面例子的代码如下:
echostrftime("%Hh%M%A%d%b",time());
这也许看起来将简化繁,但考虑一下如果你所需要的显示的为"TodayisSunday21May2000.Thetimeissomewherecloseto18h24."我想使用date()函数无疑令人感到厌烦。
在开始的时候,我提及我们有两种方式可以从Unix时间戳值中得到有用的数据。我们刚刚了解了date()和strftime()。另一个getdate()。这个函数只需要Unix的时间戳值作为参数,而函数的返回值为日期和时间的数组
二、sqlserver中时间戳如何理解
1、SQL Server timestamp数据类型与时间和日期无关。SQL Server timestamp是二进制数字,它表明数据库中数据修改发生的相对顺序。实现 timestamp数据类型最初是为了支持 SQL Server恢复算法。每次修改页时,都会使用当前的@@D *** S值对其 *** 标记,然后@@D *** S加1。这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp值与时间没有任何关系。
2、我们知道数字类型有个“标识”属 *** ,设置好“标识 *** ”、“标识递增量”,每增加一条记录时,这个字段的值就会在最近的一个标识值基础上自动增加,这样我们可以知道哪些记录是先添加的,哪些记录是后添加的,但是我们无法知道哪些记录修改过。timestamp这个类型的字段呢,每增加一条记录时,它会在最近的一个时间戳基础上自动增加,当修改某条记录时,它也会在最近的一个时间戳基础上自动增加,所以我们就知道哪些记录修改过了。
3、timestamp这种数据类型表现自动生成的二进制数,确保这些数在数据库中是唯一的。timestamp一般用作给表行加版本戳的机制。存储大小为 8字节。
4、 Transact-SQL timestamp数据类型与在 SQL- *** 标准中定义的 timestamp数据类型不同。SQL- *** timestamp数据类型等价于 Transact-SQL datetime数据类型。
5、Microsoft® SQL Server™将来的版本可能会修改 Transact-SQL timestamp数据类型的行为,使它与在标准中定义的行为一致。到那时,当前的 timestamp数据类型将用 rowversion数据类型替换。
6、Microsoft® SQL Server™ 2000引入了 timestamp数据类型的 rowversion同义词。在 DDL语句中尽可能使用 rowversion而不使用 timestamp。rowversion受数据类型同义词行为的制约。有关更多信息,请参见数据类型同义词。
7、在 CREATE TABLE或 ALTER TABLE语句中,不必为 timestamp数据类型提供列名:
8、CREATE TABLE ExampleTable(PriKey int PRIMARY KEY, timestamp)如果没有提供列名,SQL Server将生成 timestamp的列名。rowversion数据类型同义词不具有这样的行为。指定 rowversion时必须提供列名。
9、一个表只能有一个 timestamp列。每次 *** 或更新包含 timestamp列的行时,timestamp列中的值均会更新。这一属 *** 使 timestamp列不适合作为键使用,尤其是不能作为主键使用。对行的任何更新都会更改 timestamp值,从而更改键值。如果该列属于主键,那么旧的键值将无效,进而引用该旧值的外键也将不再有效。如果该表在动态游标中引用,则所有更新均会更改游标中行的位置。如果该列属于索引键,则对数据行的所有更新还将导致索引更新。
10、不可为空的 timestamp列在语义上等价于 binary(8)列。可为空的 timestamp列在语义上等价于 varbinary(8)列。
11、Microsoft SQL Server用两个 4字节的整数内部存储 datetime数据类型的值。之一个 4字节存储 base date(即 1900年 1月 1日)之前或之后的天数。基础日期是 *** 参考日期。不允许早于 1753年 1月 1日的 datetime值。另外一个 4字节存储以午夜后毫秒数所 *** 的每天的时间。
三、什么是mysql 的时间戳
select unix_timestamp('2009-10-26 10-06-07')
如果参数为空,则处理为当前时间
select from_unixtime(1256540102)
有些应用生成的时间戳是比这个多出三位,是毫秒表示,如果要转换,需要先将最后三位去掉,否则返回NULL
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMES *** P()用一个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME字符串、一个TIMES *** P或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。
mysql> select UNIX_TIMES *** P();
mysql> select UNIX_TIMES *** P('1997-10-04 22:23:00');
当UNIX_TIMES *** P被用于一个TIMES *** P列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串还是或数字上下文中被使用。
mysql> select FROM_UNIXTIME(875996580);
->'1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580)+ 0;
FROM_UNIXTIME(unix_timestamp,for *** t)
返回表示 Unix时间标记的一个字符串,根据for *** t字符串格式化。for *** t可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。
mysql> select FROM_UNIXTIME(UNIX_TIMES *** P(),
->'1997 23rd December 03:43:30 x'
通过 UNIX_TIMES *** P函数把 MySQL数据库中的 date类型数据转换成 unix timestamp形式的一个整形数字:
select UNIX_TIMES *** P('2006-02-28') testdate;
按理说得到的时间戳应该可以直接拿来给 PHP的 date()等函数使用。但奇怪的是:
显示出来的日期跟数据库实际的日期相比却少了一天,百思不得其解。反复查看 MySQL关于 UNIX_TIMES *** P函数的说明,终于发现问题所在:“The server interprets date as a value in the c *** rent time zone and converts it to an internal value in UTC.”原来 MySQL的 UNIX_TIMES *** P函数得到的时间戳是 UTC时间,而不是服务器设定的特定 Time zone的时间。经过这样一转化,时间戳就凭空少了8个小时(对于咱这里来说),而 PHP中的 timestamp则计算的都是 *** 设定时区的当地时间。因此 2006-02-28这个日期被减去了8个小时,自然变成了2006-02-27。
解决 *** :把这八个小时加回去(UNIX_TIMES *** P('2006-02-28'+ INTERVAL 8 HOUR));或者弃用 UNIX_TIMES *** P函数,直接得到 MySQL date字符串之后通过 strtotime()函数来把字符串转化成真正的本地时间戳。
找出下个月生日的动物也是容易的。假定当前月是4月,那么月值是4,你可以找在5月出生的动物(5月), *** 是:
mysql> SELECT name, birth FROM pet WHERE MONTH(birth)= 5;
$conn=mysql_connect("localhost","root","1234")or *** ("连接数据库失败");
$co *** b=mysql_select_db("test",$conn)or *** ("连接表失败");
$result= mysql_query($query,$conn);
while($row= mysql_fetch_array($result)){
关于数据库时间戳到此分享完毕,希望能帮助到您。