常见数据库对日期时间格式化

1、mysql

DATE_FORMAT(date,format)
根据format字符串格式化date值。下列修饰符可以被用在format字符串中:

%M  月名字(January……December)
%W  星期名字(Sunday……Saturday)
%D  有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y  年, 数字, 4 位
%y  年, 数字, 2 位
%a  缩写的星期名字(Sun……Sat)
%d  月份中的天数, 数字(00……31)
%e  月份中的天数, 数字(0……31)
%m  月, 数字(01……12)
%c  月, 数字(1……12)
%b  缩写的月份名字(Jan……Dec)
%j  一年中的天数(001……366)
%H  小时(00……23)
%k  小时(0……23)
%h  小时(01……12)
%I  小时(01……12)
%l  小时(1……12)
%i  分钟, 数字(00……59)
%r  时间,12 小时(hh:mm:ss [AP]M)
%T  时间,24 小时(hh:mm:ss)
%S  秒(00……59)
%s  秒(00……59)
%p  AM或PM
%w  一个星期中的天数(0=Sunday ……6=Saturday )
%U  星期(0……52), 这里星期天是星期的第一天
%u  星期(0……52), 这里星期一是星期的第一天
%%  一个文字“%”

2、sql server

sql server转换使用convert来实现


Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2): 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3): 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4): 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6): 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7): 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8 ): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10): 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 13): 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14): 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25): 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100): 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101): 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102): 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104): 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105): 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106): 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109): 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110): 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111): 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112): 20060516
Select CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130): 28 ????? 1431  3:26:31:180PM
Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427 10:57:49:920AM

3、oracle

oracle转换日期或者时间用to_char(datetime, format)

format的参数有

HH     一天的小时数 (01-12)
HH12     一天的小时数 (01-12)
HH24     一天的小时数 (00-23)
MI     分钟 (00-59)
SS     秒 (00-59)
SSSS     午夜后的秒 (0-86399)
AM or A.M. or PM or P.M.     正午标识(大写)
am or a.m. or pm or p.m.     正午标识(小写)
Y,YYY     带逗号的年(4 和更多位)
YYYY     年(4和更多位)
YYY     年的后三位
YY     年的后两位
Y     年的最后一位
BC or B.C. or AD or A.D.     年标识(大写)
bc or b.c. or ad or a.d.     年标识(小写)
MONTH     全长大写月份名(9字符)
Month     全长混合大小写月份名(9字符)
month     全长小写月份名(9字符)
MON     大写缩写月份名(3字符)
Mon     缩写混合大小写月份名(3字符)
mon     小写缩写月份名(3字符)
MM     月份 (01-12)
DAY     全长大写日期名(9字符)
Day     全长混合大小写日期名(9字符)
day     全长小写日期名(9字符)
DY     缩写大写日期名(3字符)
Dy     缩写混合大小写日期名(3字符)
dy     缩写小写日期名(3字符)
DDD     一年里的日子(001-366)
DD     一个月里的日子(01-31)
D     一周里的日子(1-7;SUN=1)
W     一个月里的周数
WW     一年里的周数
CC     世纪(2 位)
J     Julian 日期(自公元前4712年1月1日来的日期)
Q     季度
RM     罗马数字的月份(I-XII;I=JAN)-大写
rm     罗马数字的月份(I-XII;I=JAN)-小写

精彩SQL语句

1、oracle求每月第一天和最后一天

SELECT Trunc(Trunc(SYSDATE, 'MONTH') - 1, 'MONTH') First_Day_Last_Month,
 Trunc(SYSDATE, 'MONTH') - 1 / 86400 Last_Day_Last_Month,
 Trunc(SYSDATE, 'MONTH') First_Day_Cur_Month,
 LAST_DAY(Trunc(SYSDATE, 'MONTH')) + 1 - 1 / 86400 Last_Day_Cur_Month
FROM dual;

2、sql server对日期的常规处理

SELECT REPLACE(CONVERT(varchar(10),GETDATE(),120),N'-0','-')  短日期格式:yyyy-m-d
SELECT STUFF(STUFF(CONVERT(char(8),GETDATE(),112),5,0,N'年'),8,0,N'月')+N'日'  长日期格式:yyyy年mm月dd日 --A. 方法1
SELECT DATENAME(Year,GETDATE())+N'年'+DATENAME(Month,GETDATE())+N'月'+DATENAME(Day,GETDATE())+N'日'   长日期格式:yyyy年mm月dd日 --A. 方法2
SELECT DATENAME(Year,GETDATE())+N'年'+CAST(DATEPART(Month,GETDATE()) AS varchar)+N'月 '+DATENAME(Day,GETDATE())+N'日'  短日期格式:yyyy年m月d日
SELECT CONVERT(char(11),GETDATE(),120)+CONVERT(char(12),GETDATE(),114)  完整日期+时间格式:yyyy-mm-dd hh:mi:ss:mmm
Select CONVERT(varchar(100), GETDATE(), 8 ): 10:57:46
Select CONVERT(varchar(100), GETDATE(), 24): 10:57:47
Select CONVERT(varchar(100), GETDATE(), 108): 10:57:49
Select CONVERT(varchar(100), GETDATE(), 12): 060516
Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16 

3、oracle中400w条记录的表中随机删除20条记录

--使用for
declare 
begin
     for c in (select * from (  select rowid rd from t2  order by dbms_random.value)m where rownum<=20) 
      loop
        delete from t2 where rowid=c.rd;
      end loop;
  commit;
end;
--不使用for
declare abc number;
arid rowid;
cursor cursor_sal is
 select * from (select rowid rd from t2  order by dbms_random.value)m where rownum<=20;
begin
      open cursor_sal;
      loop
        fetch cursor_sal into arid;
         exit when cursor_sal%notfound;
        delete from t2 where rowid=arid;
      end loop;
      close cursor_sal; 
  commit;
end;

两表连接,取出其中某些项不重复的数据

有省、市数据库表,现在要求只取每一个省中的一个市出来

数据库脚步如下

省表:

CREATE TABLE [dbo].[mem_province](
 [id] [int] NOT NULL,
 1 [nvarchar](6) NOT NULL,
 [name] [nvarchar](40) NULL,
 CONSTRAINT [PK_mem_province] PRIMARY KEY CLUSTERED
(
 1 ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

市表:

CREATE TABLE [dbo].[mem_city](
 [id] [int] NOT NULL,
 1 [nvarchar](6) NOT NULL,
 [name] [nvarchar](50) NULL,
 [provinceId] [nvarchar](6) NULL,
 CONSTRAINT [PK_mem_city] PRIMARY KEY CLUSTERED
(
 1 ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

执行sql语句为:


SELECT *
FROM   (
 SELECT a.id aid,
 a.code acode,
 a.name aname,
 b.id bid,
 b.code bcode,
 b.name bname,
 b.provinceId bprovinceId
 FROM   mem_province a left   JOIN
 mem_city b
 on  a.code= b.provinceId
 )c
WHERE  NOT   EXISTS (
 SELECT 1
 FROM   (SELECT a.id aid,
 a.code acode,
 a.name aname,
 b.id bid,
 b.code bcode,
 b.name bname,
 b.provinceId bprovinceId
 FROM   mem_province a LEFT   JOIN
 mem_city b
 on  a.code= b.provinceId)e
 WHERE  e.bid<c.bid
 AND  e.aname = c.aname
) ORDER BY aid

结果如:

多种方式的md5加密

一、oracle实现md5加密:

CREATE OR REPLACE function fn_md5(input_string VARCHAR2) return varchar2
IS
raw_input RAW(128) := UTL_RAW.CAST_TO_RAW(input_string);
decrypted_raw RAW(2048);
error_in_input_buffer_length EXCEPTION;
BEGIN
sys.dbms_obfuscation_toolkit.MD5(input => raw_input,checksum => decrypted_raw);
return rawtohex(decrypted_raw);
END;

二、mysql实现md5加密:

select upper(md5('abc')) from cdb_settings limit 1;


注意问题:在mysql中不知道为什么使用了upper不能转化为大写,尝试了几个编码的mysql库都不行,也许是我mysql版本的问题,先记录下mysql版本

三、Sql Server 实现md5加密

select hashbytes('MD5', 'abc');

四、C#实现md5加密:

string abc=System.Web.Security.FormsAuthentication.
HashPasswordForStoringInConfigFile("abc", "MD5") ;
 Response.Write(abc);

五、Javascript实现md5加密:

var hexcase = 0; function hex_md5(a)
{ return rstr2hex(rstr_md5(str2rstr_utf8(a))) }
function hex_hmac_md5(a, b)
{ return rstr2hex(rstr_hmac_md5(str2rstr_utf8(a), str2rstr_utf8(b))) }
 function md5_vm_test()
{ return hex_md5("abc").toLowerCase() == "900150983cd24fb0d6963f7d28e17f72" }
 function rstr_md5(a)
{ return binl2rstr(binl_md5(rstr2binl(a), a.length * 8)) }
 function rstr_hmac_md5(c, f)
{ var e = rstr2binl(c); if (e.length > 16)
{ e = binl_md5(e, c.length*8) }
 var a = Array(16), d = Array(16);
 for (var b = 0; b < 16; b++)
{ a[b] = e[b] ^ 909522486; d[b] = e[b] ^ 1549556828 }
var g = binl_md5(a.concat(rstr2binl(f)), 512 + f.length * 8);
return binl2rstr(binl_md5(d.concat(g), 512 + 128)) }
function rstr2hex(c) { try { hexcase } catch (g) { hexcase = 0 }
 var f = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
 var b = ""; var a; for (var d = 0; d < c.length; d++) { a = c.charCodeAt(d);
 b += f.charAt((a >>> 4) & 15) + f.charAt(a & 15) } return b } function str2rstr_utf8(c)
 { var b = ""; var d = -1; var a, e; while (++d < c.length)
{ a = c.charCodeAt(d); e = d + 1 < c.length ? c.charCodeAt(d + 1) : 0;
 if (55296 <= a && a <= 56319 && 56320 <= e && e <= 57343)
{ a = 65536 + ((a & 1023) << 10) + (e & 1023); d++ }
if (a <= 127) { b += String.fromCharCode(a) }
else { if (a <= 2047) { b += String.fromCharCode(192 | ((a >>> 6) & 31),
 128 | (a & 63)) } else { if (a <= 65535) { b += String.fromCharCode(224
| ((a >>> 12) & 15), 128 | ((a >>> 6) & 63), 128 | (a & 63)) }
else { if (a <= 2097151) { b += String.fromCharCode(240 |
((a >>> 18) & 7), 128 | ((a >>> 12) & 63), 128 | ((a >>> 6) & 63),
 128 | (a & 63)) } } } } } return b } function rstr2binl(b)
{ var a = Array(b.length >> 2); for (var c = 0; c<a.length; c++)
 { a1 = 0 } for (var c = 0; c <b.length*8;c =c+8 )
{ a1 |= (b.charCodeAt(c / 8 ) & 255) << (c % 32) } return a }
function binl2rstr(b) { var a = ""; for (var c = 0; c<b.length * 32; c=c+8)
 { a += String.fromCharCode((b1 >>> (c % 32)) & 255) }
 return a } function binl_md5(p, k) { p[k >> 5] |= 128 << ((k) % 32);
p[(((k + 64) >>> 9) << 4) + 14] = k; var o = 1732584193;
var n = -271733879; var m = -1732584194; var l = 271733878;
 for (var g = 0; g < p.length; g += 16) { var j = o; var h = n;
var f = m; var e = l; o = md5_ff(o, n, m, l, p[g + 0], 7, -680876936);
 l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586); m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819);
n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330); o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897);
l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426); m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341);
 n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983); o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416);
l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417); m = md5_ff(m, l, o, n, p[g + 10], 17, -42063);
 n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162); o = md5_ff(o, n, m, l, p[g + 12], 7, 1804603682);
 l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101); m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290);
n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329); o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510);
 l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632); m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713);
n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302); o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691);
 l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083); m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335);
n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848); o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438);
l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690); m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961);
 n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501); o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467);
 l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784); m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473);
n = md5_gg(n, m, l, o, p[g + 12], 20, -1926607734); o = md5_hh(o, n, m, l, p[g + 5], 4, -378558);
l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463); m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562);
 n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556); o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060);
 l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353); m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632);
n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640); o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174);
l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222); m = md5_hh(m, l, o, n, p[g + 3], 16, -722521979);
n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189); o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487);
l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835); m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520);
n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651); o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844);
l = md5_ii(l, o, n, m, p[g + 7], 10, 1126891415); m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905);
n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055); o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571);
l = md5_ii(l, o, n, m, p[g + 3], 10, -1894986606); m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523);
n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799); o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359);
 l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744); m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380);
n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649); o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070);
l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379); m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259);
n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551); o = safe_add(o, j); n = safe_add(n, h);
m = safe_add(m, f); l = safe_add(l, e) } return Array(o, n, m, l) }
function md5_cmn(h, e, d, c, g, f) { return safe_add(bit_rol(safe_add(safe_add(e, h),
safe_add(c, f)), g), d) } function md5_ff(g, f, k, j, e, i, h)
{ return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h) } function md5_gg(g, f, k, j, e, i, h)
{ return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h) } function md5_hh(g, f, k, j, e, i, h)
{ return md5_cmn(f ^ k ^ j, g, f, e, i, h) } function md5_ii(g, f, k, j, e, i, h)
{ return md5_cmn(k ^ (f | (~j)), g, f, e, i, h) } function safe_add(a, d)
{ var c = (a & 65535) + (d & 65535); var b = (a >> 16) + (d >> 16) + (c >> 16);
return (b << 16) | (c & 65535) } function bit_rol(a, b) { return (a << b) | (a >>> (32 - b)) }

实现:

<script src="md5-min.js" type="text/javascript"></script>
 <script type="text/javascript">
 alert('abc经过md5加密后结果为:\n'+hex_md5('abc'));
 </script>

六、php实现md5加密:

echo strtoupper(md5('abc')) ;

通过sql server 数据库中的sql语句实现项目需求

最近都关注oracle,今天没有办法,因为项目使用的是sql server数据库,许多东西都忘记的差不多了。需要实现一个功能,本来可以使用程序去实现,但是我不爽,一定想通过数据库本身来解决这个问题。问题大概是:

项目中是要实现在别人寻找到宝贝后,要回答一个问题,这个问题暂时定为有四个选项,其中一个正确的,在数据库中使用两张表来实现,一张是记录问题的题目和答案(表一),另一张表专门用来记录每个题目中的选项(表二),表的sql脚本如下:

表一:

USE [xb_new]
GO
/****** 对象:  Table [dbo].[Question]    脚本日期: 06/13/2010 21:17:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Question](
[id] [int] IDENTITY(1,1) NOT NULL,
[iss_id] [int] NULL,
[answer] [nvarchar](50) NULL,
[question] [nvarchar](150) NULL,
CONSTRAINT [PK_Question_] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH  (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,  ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

表中数据如下:

表二:

USE [xb_new]
GO
/****** 对象:  Table [dbo].[Qusetion_Answer]    脚本日期: 06/13/2010 21:18:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Qusetion_Answer](
[id] [int] IDENTITY(1,1) NOT NULL,
[qid] [int] NOT NULL,
[qtext] [nvarchar](50) NOT NULL,
[qvalue] [nvarchar](2) NULL
) ON [PRIMARY]

表中数据如下


现在需求是:把一个题目的四个选项合并到一起,并为了在网页上换行,显示题目,显示答案。

其中难道是行列转换,以前在orcal中都是使用decode来实现的,现在郁闷的sql server中竟然不支持这个函数,只能我在oracle中比较讨厌的case(主要要多写很多when、then、end我不喜欢,而且还容易忘记格 式)来实现。实现sql脚本如下:

SELECT a,q,aa+'<br>'+bb+'<br>'+cc+'<br>'+dd result FROM
(SELECT DISTINCT answer a,Question.Question q,
aa=MAX(CASE qvalue WHEN 'A' THEN '(A)'+qtext END),
bb=max(CASE qvalue WHEN 'B' THEN '(B)'+qtext END),
cc=max(CASE qvalue WHEN 'C' THEN '(C)'+qtext END),
dd=max(CASE qvalue WHEN 'D' THEN '(D)'+qtext END)
FROM dbo.Question,dbo.Qusetion_Answer
WHERE qid=dbo.Question.id GROUP BY dbo.Question.answer,Question.Question) temp;

结果如下: