精华内容
下载资源
问答
  • 数据库日期 是数字
    千次阅读
    2020-12-19 18:28:39

    在实际的处理中,还有一种比较另类的日期加减处理,就是在指定的日期中,加上(或者减去)多个日期部分,比如将2005年3月11日,加上1年3个月11天2小时。对于这种日期的加减处理,DATEADD函数的力量就显得有点不够。

    要实现多个日期部分的加减处理,最主要的就是把要加减的日期字符分解,然后根据分解的结果在指定日期的对应日期部分加上相应的值,其难点在于如何分解日期字符,以及判断分解后的日期字符属于哪个日期部分。要顺利地分解出日期字符的话,首先要规定日期加减的日期字符的格式,可以这样定义:

    y-m-d h:m:s.m | -y-m-d h:m:s.m

    说明:要加减的日期字符输入方式与日期字符串相同。日期与时间部分用空格分隔,最前面一个字符如果是减号(-)的话,表示做减法处理,否则做加法处理。如果日期字符只包含数字,则视为日期字符中,仅包含天的信息。

    确定了日期字符格式后,处理方法就可以这样确定:获取日期字符的第一个字符,判断处理方式,然后将要加减的日期字符按空格分拆为日期和时间两部分,对于日期部分从低位到高位逐个截取日期数据进行处理,对于时间从高位到低位逐个处理。

    以下是实现日期的多个部分同时加减处理的用户定义函数代码:

    CREATE FUNCTION f_DateADD(

    @Date datetime,

    @DateStr varchar(23)

    )RETURNS datetime

    AS

    BEGIN

    DECLARE @bz int,@s varchar(12),@i int

    IF @DateStr IS NULL OR @Date IS NULL

    OR(CHARINDEX('.',@DateStr)>0

    AND @DateStr NOT LIKE '%[:]%[:]%.%')

    RETURN(NULL)

    IF @DateStr='' RETURN(@Date)

    SELECT @bz=CASE

    WHEN LEFT(@DateStr,1)='-' THEN -1

    ELSE 1 END,

    @DateStr=CASE

    WHEN LEFT(@Date,1)='-'

    THEN STUFF(RTRIM(LTRIM(@DateStr)),1,1,'')

    ELSE RTRIM(LTRIM(@DateStr)) END

    IF CHARINDEX(' ',@DateStr)>1

    OR CHARINDEX('-',@DateStr)>1

    OR(CHARINDEX('.',@DateStr)=0

    AND CHARINDEX(':',@DateStr)=0)

    BEGIN

    SELECT @i=CHARINDEX(' ',@DateStr+' ')

    ,@s=REVERSE(LEFT(@DateStr,@i-1))+'-'

    ,@DateStr=STUFF(@DateStr,1,@i,'')

    ,@i=0

    WHILE @s>'' and @i<3

    SELECT @Date=CASE @i

    WHEN 0 THEN DATEADD(Day,@bz*REVERSE(LEFT(@s,CHARINDEX('-',@s)-1)),@Date)

    WHEN 1 THEN DATEADD(Month,@bz*REVERSE(LEFT(@s,CHARINDEX('-',@s)-1)),@Date)

    WHEN 2 THEN DATEADD(Year,@bz*REVERSE(LEFT(@s,CHARINDEX('-',@s)-1)),@Date)

    END,

    @s=STUFF(@s,1,CHARINDEX('-',@s),''),

    @i=@i+1

    END

    IF @DateStr>''

    BEGIN

    IF CHARINDEX('.',@DateStr)>0

    SELECT @Date=DATEADD(Millisecond

    ,@bz*STUFF(@DateStr,1,CHARINDEX('.',@DateStr),''),

    @Date),

    @DateStr=LEFT(@DateStr,CHARINDEX('.',@DateStr)-1)+':',

    @i=0

    ELSE

    SELECT @DateStr=@DateStr+':',@i=0

    WHILE @DateStr>'' and @i<3

    SELECT @Date=CASE @i

    WHEN 0 THEN DATEADD(Hour,@bz*LEFT(@DateStr,CHARINDEX(':',@DateStr)-1),@Date)

    WHEN 1 THEN DATEADD(Minute,@bz*LEFT(@DateStr,CHARINDEX(':',@DateStr)-1),@Date)

    WHEN 2 THEN DATEADD(Second,@bz*LEFT(@DateStr,CHARINDEX(':',@DateStr)-1),@Date)

    END,

    @DateStr=STUFF(@DateStr,1,CHARINDEX(':',@DateStr),''),

    @i=@i+1

    END

    RETURN(@Date)

    END

    更多相关内容
  • 由excel 表格传入数据到SQL Server 数据时,我们的日期数据很有可能会被转成一串...那么,可以使用 dateadd 进行数字转换,转换为日期类型。如: DATEADD(day,cast(数值asint)-2,cast('1900-1-1'asdate)) ...

    1.SQL Server 数值 转日期

    由excel 表格传入数据到SQL Server 数据时,我们的日期数据很有可能会被转成一串数据:

    如:

    那么,可以使用 dateadd 进行数字转换,转换为日期类型。如:

    DATEADD(day, cast( 数值 as int) -2 ,cast('1900-1-1' as date))

    2.C#方式

    //原数值 44504
    //错
    Convert.ToDateTime("1900-1-1").AddDays(44504).ToString("yyyy/MM/dd");
    //正确
    Convert.ToDateTime("1900-1-1").AddDays(44504-2).ToString("yyyy/MM/dd");
    string redate = dt16_1.Rows[3]["F6"].ToString();//工厂回复项目交期
    if (redate.Contains("/"))
    {
       redate = redate.Replace("0:00:00", "").ToString();
    }
    else
    {
       redate = Convert.ToDateTime("1900-1-1").AddDays(Convert.ToInt32(redate)-2).ToString("yyyy/MM/dd");
    }

    展开全文
  • 数据库日期操作

    2021-12-03 14:46:41
    数据库日期操作使用mysql概述:主要是对数据分析统计比对最常用:把date/datetime转化为从0-0-0到现在的天数:to_days('data/datetime')获取特定的时间要素直接算date/datetime的差如何插入一段漂亮的代码片改变时间...

    使用mysql

    概述:主要是对数据分析统计比对

    最常用:把date/datetime转化为从0-0-0到现在的天数:to_days(‘data/datetime’)

    意义:可以把日期都化为一个基准用于比较
    实例
    比如2020-2-2到2000-1-1有多少天
    示例

    获取特定的时间要素

    year(),month(),day(),quater()(季度)都类似

    直接算date/datetime的差


    timestampdiff([你想要的差的类系(如月份)],date,date)
    datetime也是可以的

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    改变时间类型

    date_add (加)和 date_sub(减)

    date_add(‘date/datetime’ , interval [数字] [类型])
    在这里插入图片描述

    展开全文
  • TO_CHAR(arg1,’fmt’):将一个日期或者数字转换为字符类型。带格式化样式 fmt。 arg1: 数字或者日期类型 。需要转换的数据。 fmt: 转换格式 。 SQL> select to_char(sysdate,'month') from ...

    数据类型转换分为俩种 。

     

    隐式数据类型转换:当源数据的类型和目标数据的类型不同的时候,如果没有转换函数,就会发生隐式转换,也称自动转换。

     

    对于直接赋值转换: 

     

     对于表达式赋值:

     

     

      隐式转换的问题:

    性能影响:

    隐式转换的最大问题就是转换时会导致索引的无效,进而可能导致全表扫描。当表的数据量很大的时候,产生会很大的性能问题。比如说,VARCHAR2 和 NVARCHAR2 隐式数据类型转换导致的性能问题。

     

    不便于阅读:

    由于隐式转换使得数据库编程人员和 DBA 难以了解到究竟发生了怎样的类型转换,而且如果代码很多很长的话要查出错误就需要费很大的劲

     

    显示数据类型转换:通过数据库中的转换函数完成数据类型的转换。

     

    数字,日期转换成字符:

    TO_CHAR(arg1,’fmt’):将一个日期或者数字转换为字符类型。带格式化样式 fmt。
    arg1:数字或者日期类型。需要转换的数据。
    fmt:转换格式

    SQL> select to_char(sysdate,'month') from dual;
    TO_CHAR(SYSDATE,'MONTH')
    ------------------------
    7月
    
    SQL> select to_char(sysdate,'dd') from dual;
    TO_CHAR(SYSDATE,'DD')
    ---------------------
    31
    
    SQL> select to_char(sysdate,'day') from dual;
    TO_CHAR(SYSDATE,'DAY')
    ----------------------
    星期三
    
    SQL> select to_char(sysdate,'dy') from dual;
    TO_CHAR(SYSDATE,'DY')
    ---------------------
    星期三
    
    SQL> select to_char(sysdate,'yyyy') from dual;
    TO_CHAR(SYSDATE,'YYYY')
    -----------------------
    2019
    
    SQL> select to_char(sysdate,'year') from dual;
    TO_CHAR(SYSDATE,'YEAR')
    ------------------------------------------
    twenty nineteen
    
    SQL> select to_char(sysdate,'mm') from dual;
    TO_CHAR(SYSDATE,'MM')
    ---------------------
    07
    
    SQL> select to_char(sysdate,'cc') from dual;
    TO_CHAR(SYSDATE,'CC')
    ---------------------
    21
    
    SQL> select to_char(sysdate,'scc') from dual;
    TO_CHAR(SYSDATE,'SCC')
    ----------------------
     21
    
    SQL> select to_char(sysdate,'iyyyy') from dual;
    TO_CHAR(SYSDATE,'IYYYY')
    ------------------------
    20199
    
    SQL> select to_char(sysdate,'iyy') from dual;
    TO_CHAR(SYSDATE,'IYY')
    ----------------------
    019
    
    SQL> select to_char(sysdate,'bc') from dual;
    TO_CHAR(SYSDATE,'BC')
    ---------------------
    公元
    
    SQL> select to_char(sysdate,'q') from dual;
    TO_CHAR(SYSDATE,'Q')
    --------------------
    3
    
    SQL> select to_char(sysdate,'am') from dual;
    TO_CHAR(SYSDATE,'AM')
    ---------------------
    下午
    
    SQL> select to_char(sysdate,'hh') from dual;
    TO_CHAR(SYSDATE,'HH')
    ---------------------
    02
    
    SQL> select to_char(sysdate,'hh12') from dual;
    TO_CHAR(SYSDATE,'HH12')
    -----------------------
    02
    
    SQL> select to_char(sysdate,'hh24') from dual;
    TO_CHAR(SYSDATE,'HH24')
    -----------------------
    14
    
    SQL> select to_char(sysdate,'mi') from dual;
    TO_CHAR(SYSDATE,'MI')
    ---------------------
    32
    
    SQL> select to_char(sysdate,'mi:ss') from dual;
    TO_CHAR(SYSDATE,'MI:SS')
    ------------------------
    32:39

     

    SQL> select to_char(sysdate,'ddspth') from dual;
    TO_CHAR(SYSDATE,'DDSPTH')
    -------------------------
    thirty-first

     

     

    示例:显示所有雇员的名字和受雇日期,受雇日期以 2007 年 8 月 10 日 12:00:00AM 显示。

    SQL> select last_name,salary,to_char(hire_date,'yyyy"年 "mm"月 "dd"日" hh:mi:ss am') from employees where salary<5000;
    LAST_NAME                     SALARY TO_CHAR(HIRE_DATE,'YYYY"年"MM"
    ------------------------- ---------- ------------------------------
    Austin                       4800.00 2005年 06月 25日 12:00:00 上午
    Pataballa                    4800.00 2006年 02月 05日 12:00:00 上午
    Lorentz                      4200.00 2007年 02月 07日 12:00:00 上午
    Khoo                         3100.00 2003年 05月 18日 12:00:00 上午
    Baida                        2900.00 2005年 12月 24日 12:00:00 上午
    Tobias                       2800.00 2005年 07月 24日 12:00:00 上午
    Himuro                       2600.00 2006年 11月 15日 12:00:00 上午
    Colmenares                   2500.00 2007年 08月 10日 12:00:00 上午

     

    数字转换:

    FM:代表去掉返回结果中的前后空格。

    SQL> select to_char(123687.146,'999,999.999') from dual;
    TO_CHAR(123687.146,'999,999.99
    ------------------------------
     123,687.146
    
    SQL> select to_char(123687.1464,'999,999.999') from dual;
    TO_CHAR(123687.1464,'999,999.9
    ------------------------------
     123,687.146
    
    SQL> select to_char(123646487.1464,'999,999.999') from dual;
    TO_CHAR(123646487.1464,'999,99
    ------------------------------
    ############
    
    SQL> select to_char(646487.1464,'$999,999.999') from dual;
    TO_CHAR(646487.1464,'$999,999.
    ------------------------------
     $646,487.146
    
    SQL> select to_char(646487.1464,'L999,999.999') from dual;
    TO_CHAR(646487.1464,'L999,999.
    ------------------------------
             ¥646,487.146
    
    SQL> select to_char(646487.1464,'l999,999.999') from dual;
    TO_CHAR(646487.1464,'L999,999.
    ------------------------------
             ¥646,487.146
    
    SQL> select to_char(646487.1464,'fml999,999.999') from dual;
    TO_CHAR(646487.1464,'FML999,99
    ------------------------------
    ¥646,487.146
    
    SQL> select to_char(646487.1464,'fm$999,999.999') from dual;
    TO_CHAR(646487.1464,'FM$999,99
    ------------------------------
    $646,487.146

    示例:查询雇员 Whalen,显示他的薪水,在薪水前添加美元符号与千位符。

    SQL> select last_name,salary,to_char(salary,'fm$999,999.999') from employees where lower(last_name)='whalen';
    LAST_NAME                     SALARY TO_CHAR(SALARY,'FM$999,999.999
    ------------------------- ---------- ------------------------------
    Whalen                       4400.00 $4,400.

     

     

    to_number  字符串到数字转换
    TO_NUMBER(‘arg1’,fmt’):将字符串转换为数值型的格式。带格式化样式 fmt。
    arg1:字符串类型。需要转换的数据。
    fmt:转换格式

    SQL> select to_number('¥440.00','l999,999.999') from dual;
    select to_number('¥4400.00','l999,999.999') from dual
    ORA-01722: 无效数字
    
    SQL> select to_number('¥440.00','l999,999.999') from dual;
    TO_NUMBER('¥440.00','L999,999
    -----------------------------
                              440
    
    SQL> 
    SQL> select to_number('¥464,400.00','l999,999.999') from dual;
    TO_NUMBER('¥464,400.00','L999
    -----------------------------
                           464400

     

    TO_DATE(‘arg1’,’fmt’):将字符串转换为日期格式。带格式化样式 fmt。
    arg1:字符串类型。需要转换的数据。
    fmt:转换格式

    SQL> select to_date('2019/02/16','yyyy-mm-dd') from dual;
    TO_DATE('2019/02/16','YYYY-MM-
    ------------------------------
    2019/2/16
    
    SQL> select to_date('20190216','yyyy-mm-dd') from dual;
    TO_DATE('20190216','YYYY-MM-DD
    ------------------------------
    2019/2/16

    示例:将 2019 年 3 月 9 日 11 点 30 分转换为 Date 类型

    SQL> select to_date('2019年 3月 9日 11点 30分','yyyy"年" mm"月" dd"日" hh12"点" mi"分"') from dual;
    TO_DATE('2019年3月9日11点30分'
    -------------------------
    2019/3/9 11:30:00

    注意:空格也是格式,一定要看清楚:

    SQL> select to_date('2019年3月9日11点30分','yyyy"年" mm"月" dd"日" hh12"点" mi"分"') from dual;
    select to_date('2019年3月9日11点30分','yyyy"年" mm"月" dd"日" hh12"点" mi"分"') from dual
    ORA-01861: 文字与格式字符串不匹配

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 数据库日期转换数字转换日期方式:

    千次阅读 2018-12-10 19:40:46
    数据库日期转换数字转换日期方式: SELECT TO_CHAR(44202 -2 + TO_DATE(‘1900-01-01’, ‘YYYY-MM-DD’), ‘YYYY-MM-DD’) AS CDATE FROM DUAL;
  • 数据库10位秒时间戳数字日期处理

    千次阅读 2020-06-05 10:44:07
    处理数据库十位时间戳说明SQLSEREVER中转换ORACLE中转换java代码中转换 说明 项目需求需要查询一条sql语句,发现其中时间格式为10位时间戳(1464686734)不是传统意义上的yyyymmdd格式,10位类似这种一般是秒为单位,...
  • 数据库查询,修改日期 数字格式

    千次阅读 2018-07-31 15:56:48
    改为年-月-日输出 select DATE_FORMAT(brokerage_date,'%Y-%m-%d') as brokerageDate from table1 改为年-月-日 时:分:秒输出 select date_format(pay_end_time,'%Y-%m-%d %H:%i:%s') from table1 ...
  • 数据库日期格式化函数

    千次阅读 2020-07-27 16:30:06
    把字符串转换为日期格式: SELECT DATE_FORMAT('2020-07-27 16:23:35', '%Y-%m-%d %H:%i:%S'); 把日期转换字符串格式: SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%S'); %M 月名字(January……December)...
  • 数据库日期函数

    千次阅读 2017-06-23 08:25:12
    1. ADD_MONTHS(日期数字):在指定的日期上加入指定月数,求出新的日期; 2. MONTHS_BETWEEN(日期1,日期2):求出两个日期间的雇拥月数; 3. NEXT_DAY(日期,星期数):求出下个日期的最后一天日期; 4. 
  • 判断字符串是否是数字create or REPLACE function isnumeric(txtStr VARCHAR) RETURNS BOOLEAN AS $$ BEGIN RETURN txtStr ~ '^([0-9]+[.]?[0-9]*|[.][0-9]+)$'; END; $$ language 'plpgsql'; create or ...
  • 达梦数据库-日期类型常用函数汇总

    千次阅读 2022-05-14 12:09:13
    日期时间函数的参数至少有一个是日期时间类型(TIME,DATE,TIMESTAMP),返回值一般为日期时间类型和数值类型。由于 DM 支持儒略历,并考虑了历史上从儒略历转换至格里高利日期时的异常,不计算’1582-10-05’到’...
  • 数据库代码的时候,我们正常转换日期格式,大都是:yyyy-mm-dd的格式,或者是:yyyymmdd等,但如果转为中文样式的:yyyy年mm月dd日的格式呢,看起来挺简单,不过一时之间,真能让人发懵。其实也简单,代码如下: ...
  • 解决方法:加上JsonFormat注解 出参时自动转换为设定格式 问题解决 ! (也可以把数据库的格式变成字符串存入数据库
  • 解决PHPExcle导入日期数字

    千次阅读 2020-03-03 11:33:41
    excel为日期格式读取该数据后变为数字,框架是tp3.2,解决的关键代码如下: //引入日期处理的date类 import(“Org.Util.PHPExcel.Shared.Date”); $PHPExcel_Shared_Date = new \PHPExcel_Shared_Date(); //读取日期...
  • 数据库日期格式转换函数

    千次阅读 2017-07-26 21:27:18
    日期格式转换to_char(FZRQ,’yyyy-mm-dd hh:mi:ss’)select YSZBH, CYDW, QYD, TJD1, TJD2, TJD3, DDD, FZJG, FZR, to_char(FZRQ,'yyyy-mm-dd hh:mi:ss') as FZRQ, to_char(yxrq,'yyyy-mm-dd hh:mi:ss') as yxrq,...
  • 数据库date格式返回前端为一串数字

    千次阅读 2022-02-06 14:52:27
    但是不经操作直接set到对象中返回前端显示不是yy-mm-dd格式的日期,而是一串长数字。 修改操作: 1. 改变日期格式 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String format = sdf.format...
  • 数据库日期格式化

    千次阅读 2019-05-15 16:22:08
    select DATE_FORMAT(CURDATE(),'%Y-%m-%d %H:%I:%S'), from table format字符串: ...%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。) %Y 年, 数字, 4 位 %y 年, 数字, 2 位 %a 缩写的星期名...
  • 使用下列数据类型在数据库中存储日期日期/时间值: DATE - 格式:YYYY-MM-DD DATETIME - 格式:YYYY-MM-DD HH:MM:SS TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS YEAR - 格式:YYYY 或 YY SQL Server ...
  • 使用excel导入功能时日期数据变成数字的解决 在使用excel导入功能的时候,难免会导入日期类型的数据,这个时候无论使用easyexcel还是poi的导入方式,都有可能出现纯数字日期。 1、如果输入的日期是1900年之前的,...
  • 数据库中查出的时间是一串数字

    千次阅读 2017-10-19 09:36:00
    这其实没有错,这串数字是 时间戳(timestamp) ,通常是一个字符序列,唯一地标识某一刻的时间。 例如:1305687917表示的是,从1970年到现在的时间总共是1305687917秒   要想显示正确的时间格式,你需要给...
  • postgresql中判断是否为数字和是否为时间日期格式的相关函数,类似于sqlserver中的isDate和isnumeric函数
  • 1、使用to_date函数将字符串RKRQ字段装换成日期。 select to_date(RKRQ,‘yyyyMMdd’) from tmp 注:to_date后显示的结果与系统时间一致,无法按要求输出相应格式。 2、使用to_char函数将日期RKRQ以我们需要的格式.....
  • Oracle-日期转化数字的方法

    万次阅读 2018-05-10 15:28:41
    1. 首先你需要先把日期转化为字符 to_char(sysdate,'yyyymmdd') 2. to_number(to_char(sysdate,'yyyymmdd'))
  • mysql 日期转换和数字格式转换

    千次阅读 2021-01-30 01:42:50
    在mysql中,没有类似oracle的to_char(num,format)函数,所以涉及到数字前面补0的情况需要特殊处理。 如select left(concat('00'),@num),3)就会显示三位数字的字符串, @num=1时显示001,为123是显示123。 CONCAT...
  • 从MYSQL数据库查出指定格式的日期

    千次阅读 2021-01-27 08:51:13
    %W 星期名字(Sunday……Saturday) %D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。) %Y 年, 数字, 4 位 %y 年, 数字, 2 位 %a 缩写的星期名字(Sun……Sat) %d 月份中的天数, 数字(00……31) %e 月份中的天数, ...
  • springboot 前端显示和数据库保存的时间日期往前显示8小时,即数据库保存20点,但是前端显示的是12点; 打断点发现返回给前端的日期是没有错的;那么: 解决方式: 原: import org.springframework.format....
  • 数据库报“ORA-01722: 无效数字”错误的解决办法2020-09-30报错信息:ORA-01722: 无效数字问题SQL:?1234567891011SELECT A.*,B.FUND_CODE AS FUND_CODE,B.FUND_FULLNAME AS Fund_FullnameFROM BSP_SYS_ATTACH A,BSP_...
  • ss’) 字符串转时间 from dual select to_date(‘2019-10-25 17:15:20’,‘yyyy-MM-dd HH24:mi:ss’) 字符串 转时间 from dual MySQL MySQL 内置函数,在 MySQL 里面利用 str_to_date() 把字符串转换为日期 示例:...
  • mysql数据库----时间和日期类型

    千次阅读 2020-05-18 12:25:20
    为了方便在数据库中存储日期和时间,MySQL提供了表示日期和时间的数据类型,分别是YEAR. DATE、TIME、DATETIME和TIMESTAMP。表3-4列举了这些MySQL中日期和时间数据类型所对应的字节数、取值范围、日期格式以及零值。...
  • 问题一、数据库查询出时间,传给前端变为一串数字怎么办 // 在属性或者get方法上加此注解 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone="GMT+8") //xml层: &lt;select id=&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 189,261
精华内容 75,704
关键字:

数据库日期 是数字