時間格式資料庫
資料庫中日期存儲格式有幾種,需要根據你的需求抉擇:
1、timestamp:既能保證性能又能使用自帶時間日期函數
2、int :適合作時間的比較,但是可讀性差
3、datetime :適合資料庫數據導出,可讀性高,但查詢性能不高。(不推薦)
4、varchar:不支持時區。(不推薦)
② 資料庫同步插件如何進行時間格式轉換
以Oracle為例,具體方法如下:
sql> alter session set nls_date_format = 『yyyy-mm-dd hh24:mi:ss』;
將當前會話的時間格式修改為這種格式:2003-01-28 15:23:38,即四位年-兩位月-兩位日,空格,24小時的制的小時:分鍾:秒。這種修改方法,只對當前會話有效。
在注冊表/hkey_local_machine/software/oracle/home0主鍵中增加一個字串(8i版本),字串名為nls_date_format,字串的值為你希望定義的時間格式,如:yyyy-mm-dd hh24:mi:ss ,然後重新啟動
sql*plus。這種修改方法,對sql*plus窗口有效,即不論你打開多少個sql*plus窗口,預設的都是這種時間格式。修改伺服器端的注冊表無效,只有修改客戶端的注冊表才有效。以上方法可以參考一下。
③ 資料庫中 日期的幾種表示方法
Mysql中經常用來存儲日期的數據類型有三種:Date、Datetime、Timestamp。
【1】Date數據類型:用來存儲沒有時間的日期。Mysql獲取和顯示這個類型的格式為「YYYY-MM-DD」。支持的時間范圍為「1000-00-00」到「9999-12-31」。
【2】Datetime類型:存儲既有日期又有時間的數據。存儲和顯示的格式為 「YYYY-MM-DD HH:MM:SS」。支持的時間范圍是「1000-00-00 00:00:00」到「9999-12-31 23:59:59」。
【3】Timestamp類型:也是存儲既有日期又有時間的數據。存儲和顯示的格式跟Datetime一樣。支持的時間范圍是「1970-01-01 00:00:01」到「2038-01-19 03:14:07」。
(3)時間格式資料庫擴展閱讀
切記不要用字元串存儲日期
這種存儲日期的方式的優點還是有的,就是簡單直白,容易上手。但是,這是不正確的做法,主要會有下面兩個問題:
1、字元串佔用的空間更大。
2、字元串存儲的日期比較效率比較低(逐個字元進行比對),無法用日期相關的 API 進行計算和比較。
DateTime 類型沒有時區信息的
DateTime 類型是沒有時區信息的(時區無關),DateTime 類型保存的時間都是當前會話所設置的時區對應的時間。
當你的時區更換之後,比如你的伺服器更換地址或者更換客戶端連接時區設置的話,就會導致你從資料庫中讀出的時間錯誤。不要小看這個問題,很多系統就是因為這個問題鬧出了很多笑話。
Timestamp 和時區有關。Timestamp 類型欄位的值會隨著伺服器時區的變化而變化,自動換算成相應的時間,說簡單點就是在不同時區,查詢到同一個條記錄此欄位的值會不一樣。
④ sql資料庫中的時間類型
滿意答案。9級2010-11-29使用nvarchar對於前期的實現比較容易,但性能及後期使用及後期需求開發比較困難
如按時間排序,資料庫類型校驗,根據時間段查詢,根據時間的分組統計等等方面造成的影響比較大
追問:
如果用datetime
我的MyEclipse用Hibernate轉換時是timestamp類型的
在用模糊查詢查時間時有點糾結啊
老是報不能轉換的錯誤
回答:
用hibernate啊
那你在配置文件注入類型不用時間戳
改成這個試試java.util.Date
補充:
hibernate項目好幾年沒做過了
原來在資料庫時間建模和操縱時習慣用java.sql.Timestamp與資料庫中DateTime對應,但業務流通層,模型里還是用java.util.Date
因為這些時間直接的轉換都是一樣的方便,而且這樣做邏輯理解上比較直觀
記憶中是沒有出現過錯誤,Timestamp在現在使用數據源時經常使用
追問:
知道用date類型的哇
但是hibernate自動生成的就是timestamp類型
不改配置文件
就用timestamp怎麼做啊?總不能每次生成就改一次配置文件吧.....
追問:
還有我做的是模糊查詢
在form裡面時間又是string類型的
轉換有點麻煩
回答:
你在createSQLQuery方法後面在使用
addScalar方法傳入你datetime的實體對應名和hibernate類型試一下吧
補充:
這個的確比較麻煩,你可以寫個公共轉換方法進行轉換
就是字元串根據你的時間格式進行取出時間long
然後轉換就可以了
大概這樣子
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat();
⑤ 如何在資料庫輸入時間類型
可將時間類型定義為datetime,然後以字元串的形式插入即可。
如:
創建表:
createtabletest
(idint,
createtimedatetime)
插入數據:
insertintotestvalues(1,'2015-08-01')
插入後結果如圖:
⑥ 資料庫時間格式的轉換
c#
DateTime.ToString("yyyy-MM-DD")
需要用DateTime的時候在把STRING換回DateTime
=================================================================
Asp.net日期字元串格式化顯示--DateTime.ToString()用法詳解
我們經常會遇到對時間進行轉換,達到不同的顯示效果,默認格式為:2006-6-6 14:33:34
如果要換成成200606,06-2006,2006-6-6或更多的格式該怎麼辦呢?
這里將要用到:DateTime.ToString的方法(String, IFormatProvider)
示例:
using System;
using System.Globalization;
String format="D";
DateTime date=DataTime.Now;
Response.Write(date.ToString(format, DateTimeFormatInfo.InvariantInfo));
結果輸出
Thursday, June 16, 2006
在這里列出了參數format格式詳細用法
=======================
格式字元 關聯屬性/說明
d ShortDatePattern
D LongDatePattern
f 完整日期和時間(長日期和短時間)
F FullDateTimePattern(長日期和長時間)
g 常規(短日期和短時間)
G 常規(短日期和長時間)
m、M MonthDayPattern
r、R RFC1123Pattern
s 使用當地時間的 SortableDateTimePattern(基於 ISO 8601)
t ShortTimePattern
T LongTimePattern
u 用於顯示通用時間的格式
U 使用通用時間的完整日期和時間(長日期和長時間)
y、Y YearMonthPattern
下表列出了可被合並以構造自定義模式的模式
========================================
這些模式是區分大小寫的;例如,識別「MM」,但不識別「mm」。如果自定義模式包含空白字元或用單引號括起來的字元,則輸出字元串頁也將包含這些字元。未定義為格式模式的一部分或未定義為格式字元的字元按其原義復制。
格式模式 說明 :
d 月中的某一天。一位數的日期沒有前導零。
dd 月中的某一天。一位數的日期有一個前導零。
ddd 周中某天的縮寫名稱,在 AbbreviatedDayNames 中定義。
dddd 周中某天的完整名稱,在 DayNames 中定義。
M 月份數字。一位數的月份沒有前導零。
MM 月份數字。一位數的月份有一個前導零。
MMM 月份的縮寫名稱,在 AbbreviatedMonthNames 中定義。
MMMM 月份的完整名稱,在 MonthNames 中定義。
y 不包含紀元的年份。如果不包含紀元的年份小於 10,則顯示不具有前導零的年份。
yy 不包含紀元的年份。如果不包含紀元的年份小於 10,則顯示具有前導零的年份。
yyyy 包括紀元的四位數的年份。
gg 時期或紀元。如果要設置格式的日期不具有關聯的時期或紀元字元串,則忽略該模式。
h 12 小時制的小時。一位數的小時數沒有前導零。
hh 12 小時制的小時。一位數的小時數有前導零。
H 24 小時制的小時。一位數的小時數沒有前導零。
HH 24 小時制的小時。一位數的小時數有前導零。
m 分鍾。一位數的分鍾數沒有前導零。
mm 分鍾。一位數的分鍾數有一個前導零。
s 秒。一位數的秒數沒有前導零。
ss 秒。一位數的秒數有一個前導零。
f 秒的小數精度為一位。其餘數字被截斷。
ff 秒的小數精度為兩位。其餘數字被截斷。
fff 秒的小數精度為三位。其餘數字被截斷。
ffff 秒的小數精度為四位。其餘數字被截斷。
fffff 秒的小數精度為五位。其餘數字被截斷。
ffffff 秒的小數精度為六位。其餘數字被截斷。
fffffff 秒的小數精度為七位。其餘數字被截斷。
t 在 AMDesignator 或 PMDesignator 中定義的 AM/PM 指示項的第一個字元(如果存在)。
tt 在 AMDesignator 或 PMDesignator 中定義的 AM/PM 指示項(如果存在)。
z 時區偏移量(「+」或「-」後面僅跟小時)。一位數的小時數沒有前導零。例如,太平洋標准時間是「-8」。
zz 時區偏移量(「+」或「-」後面僅跟小時)。一位數的小時數有前導零。例如,太平洋標准時間是「-08」。
zzz 完整時區偏移量(「+」或「-」後面跟有小時和分鍾)。一位數的小時數和分鍾數有前導零。例如,太平洋標准時間是「-08:00」。
: 在 TimeSeparator 中定義的默認時間分隔符。
/ 在 DateSeparator 中定義的默認日期分隔符。
% c 其中 c 是格式模式(如果單獨使用)。如果格式模式與原義字元或其他格式模式合並,則可以省略「%」字元。
\ c 其中 c 是任意字元。照原義顯示字元。若要顯示反斜杠字元,請使用「\\」。
只有上面第二個表中列出的格式模式才能用於創建自定義模式;在第一個表中列出的標准格式字元不能用於創建自定義模式。自定義模式的長度至少為兩個字元;例如,
DateTime.ToString( "d") 返回 DateTime 值;「d」是標准短日期模式。
DateTime.ToString( "%d") 返回月中的某天;「%d」是自定義模式。
DateTime.ToString( "d ") 返回後面跟有一個空白字元的月中的某天;「d」是自定義模式。
比較方便的是,上面的參數可以隨意組合,並且不會出錯,多試試,肯定會找到你要的時間格式
如要得到2005年06月 這樣格式的時間
可以這樣寫:
date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)
如此類推.
下面列出一些Asp.net中具體的日期格式化用法:
============================================
1.綁定時格式化日期方法:
<ASP:BOUNDCOLUMN DATAFIELD= "JoinTime " DATAFORMATSTRING= "{0:yyyy-MM-dd} " >
<ITEMSTYLE WIDTH= "18% " > </ITEMSTYLE >
</ASP:BOUNDCOLUMN >
2.數據控制項如DataGrid/DataList等的件格式化日期方法:
e.Item.Cell[0].Text = Convert.ToDateTime(e.Item.Cell[0].Text).ToShortDateString();
3.用String類轉換日期顯示格式:
String.Format( "yyyy-MM-dd ",yourDateTime);
4.用Convert方法轉換日期顯示格式:
Convert.ToDateTime("2005-8-23").ToString
("yyMMdd",System.Globalization.DateTimeFormatInfo.InvariantInfo); //支持繁體資料庫
5.直接用ToString方法轉換日期顯示格式:
DateTime.Now.ToString("yyyyMMddhhmmss");
DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")
6.只顯示年月
DataBinder.Eval(Container.DataItem,"starttime","{0:yyyy-M}")
7.顯示時間所有部分,包括:年月日時分秒
<asp:BoundColumn DataField="收款時間" HeaderText="收款時間"
DataFormatString="{0:yyyy-MM-dd HH24:mm:ss}">
</asp:BoundColumn>
⑦ 資料庫的日期類型
1. 數據類型
MS SQL Server 2005 有 datetime 和 smalldatetime 兩種格式的日期時間數據類型。注意:沒有單獨的日期或時間類型。
2.資料庫內部用兩個 4 位元組的整數存儲 datetime 數據類型的值。第一個 4 位元組存儲基礎日期(即 1900-1-1, base date )之前或之後的日期。日期范圍為 1753-1-1 至 9999-12-31 。當日期為 1900-1-1 時值為 0 ;之前的日期是負數;之後日期是正數。另外一個 4 位元組存儲以午夜後三又三分之一( 10/3 )毫秒數所代表的每天的時間。精確度為百分之三秒(等於 3.33 毫秒或 0.00333 秒)。如下表所示,把值調整到 .000 、 .003 、或 .007 秒的增量。
3.SQL 如下:
查詢中,我們常常需要搜索指定日期范圍內的數據,比如返回 1998-01-01 當天內的數據,你可能會這樣寫:
Date >= '1998-01-01 00:00:00.000' and date <= '1998-01-01 23:59:59.999'
根據上面的調整規則,其實這句語句的實際搜索范圍為:
date >= '1998-01-01 00:00:00.000' and date <= '1998-01-02 00:00:00.000' 你會看到這包括了 1998-01-02 的數據,所以最好的正確的搜索語句為:
date >= '1998-01-01 00:00:00.000' and date < '1998-01-02 00:00:00.000'
4. smalldatetime 數據類型存儲日期和每天的時間,但精確度低於 datetime 。 SQL Server 將 smalldatetime 的值存儲為兩個 2 位元組的整數。第一個 2 位元組存儲 1900-1-1 後的天數。另外一個 2 位元組存儲午夜後的分鍾數。日期范圍從 1900-1-1 到 2079-6-6 ,時間精確到分鍾。 29.998 秒或更低的 smalldatetime 值向下舍入為最接近的分鍾, 29.999 秒或更高的 smalldatetime 值向上舍入為最接近的分鍾。
--returns time as 12:35
SELECT CAST ( '2000-05-08 12:35:29.998' AS smalldatetime )
GO
--returns time as 12:36
SELECT CAST ( '2000-05-08 12:35:29.999' AS smalldatetime )
GO4.
⑧ 資料庫的時間格式不對。
在資料庫中時間格式是採用UTC時間的。2010-1-1、2010-11-1、2010-1-11這些都是正確的,沒有任何錯誤。你添加到資料庫中的時候注意打「-」將來在外部應用程序中你想要顯示為什麼格式,那個你可以自己格式化即可。
⑨ 資料庫里的時間格式
--1970年到現在時間的秒數?
--mssql:
selectdateadd(second,1434506400,'1970-01-0108:00:00')
--oracle:
selectto_date('1970-01-0108:00:00','YYYY-MM-DDHH24:MI:SS')+1434506400/24/3600fromal