1.时间的问题
众所周知,由于服务器有时候会设置时间为12小时,这样数据库的时间总是拿到12小时制度,也就是带下午上午的字样
若是想要拿到24小时制的,就必须按照以下规则来
select to_char(sysdate, 'yyyy-mm-dd HH:mi:SS') as nowTime from dual --12小时制
select to_char(sysdate, 'yyyy-mm-dd HH24:mi:SS') as nowTime from dual --24小时制
c#获取时间也是这么个道理
//看字母H的大小写,大写H是24小时,小写h是12小时。具体转换如下:
string time = Convert.ToDateTime(date).ToString("yyyy-MM-dd HH:mm");//24小时
string time = Convert.ToDateTime(date).ToString("yyyy-MM-dd hh:mm");//12小时
或者你要是有足够权限的话,直接修改服务器即可(仅限于C#的window)
控制面板--区域和语言选项--把时间设置为24小时格式
日期加减法
//今天是5月3号
select to_date(to_char(sysdate-1,'yyyy-mm-dd')||' 20:00:00','yyyy-mm-dd HH24:mi:SS')
from dual
//输出2023/5/2 20:00:00
2.字符串的问题
查找字符串的位置
--查找位置是 ' '的位置,返回是' '的位置index
instr(a.studentname, ' ')
--切割字符串 ,截取num1到mun2的所有字符
substr(a.studentname, num1, num2- 1)
--一起使用,返回' '之前的内容
substr(a.studentname, 1, instr(a.studentname, '') - 1)
3.当使用的值不存在又需要返回空值的时候,用左连接最好
//这时候若是k不存在和b相对应的值,会返回一条数据,但是这条数据是空值
select *
from student b left join studentclass k
on b.name=k.name and b.id=k.id
//这时候若是k表不存在和b相对应的值,不会返回任何一条数据
select *
from student b ,
studentclass k
where b.name=k.name
and b.id=k.id
4.CASE 代码运行模块
CASE 字段 WHEN 预期值 THEN 结果1 ELSE 结果2 END
如果字段值等于预期值,则返回结果1,否则返回结果2。
5.查看字段名称在哪
SELECT table_name
FROM dba_tab_cols
WHERE column_name like '%列名%'
6.查看日志信息
--看日志
select * from v$logfile;--日志地址
select * from v$sql --日志执行
7.自增字段和調用
---創建自增序列
CREATE SEQUENCE MID
INCREMENT BY 1 --每次加1
START WITH 1 ---從1開始
MINVALUE 0 ---最小值
NOCYCLE
CACHE 20;
---每運行一次自增1
select MID.nextval from dual
--如何清0
select MID.nextval from dual into aa --獲取目前的數列是多少,假設是8
alter sequence MID increment by -aa --將自增數列設為-aa
select MID.nextval from dual --執行一次,此時自增數列變為0
alter sequence MID increment by 1 --將自增數列設為1,重新從0開始 下次執行就是1了
8.如何写翻页逻辑
select rownum, t.*
from table_t t
where rownum BETWEEN 1 and 10
--若是得出的结果要orderby,而且要按照orderby顺序123,就要用到
row_number() over( order by xxx) as xxx 函数
select * from (
select row_number() over( order by t.no, t.date) as priority, r.*
from table_t t
)
WHERE priority BETWEEN :1 and 10