to_Date()用法

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

会话已更改。

SQL> SELECT TO_DATE('2006-05-01 19:25:34', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

TO_DATE('2006-05-01
-------------------
2006-05-01 19:25:34

SQL> SELECT TO_DATE('2006-05-01 19:25', 'YYYY-MM-DD HH24:MI') FROM DUAL;

TO_DATE('2006-05-01
-------------------
2006-05-01 19:25:00

SQL> SELECT TO_DATE('2006-05-01 19', 'YYYY-MM-DD HH24') FROM DUAL;

TO_DATE('2006-05-01
-------------------
2006-05-01 19:00:00

SQL> SELECT TO_DATE('2006-05-01', 'YYYY-MM-DD') FROM DUAL;

TO_DATE('2006-05-01
-------------------
2006-5-1

SQL> SELECT TO_DATE('2006-05', 'YYYY-MM') FROM DUAL;

TO_DATE('2006-05','
-------------------
2006-5-1

SQL> SELECT TO_DATE('2006', 'YYYY') FROM DUAL;

TO_DATE('2006','YYY
-------------------
2006-1-1 

当省略HH、MI和SS对应的输入参数时,Oracle使用0作为DEFAULT值。如果输入的日期数据忽略时间部分,Oracle会将时、分、秒部分都置为0,也就是说会取整到日。

同样,忽略了DD参数,Oracle会采用1作为日的默认值,也就是说会取整到月。

但是,不要被这种“惯性”所迷惑,如果忽略MM参数,Oracle并不会取整到年,取整到当前月。

注意:1.在使用Oracle的to_date函数来做日期转换时,可能会直觉地采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;
原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
                 2.另要以24小时的形式显示出来要用HH24
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分钟
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm会显示月份 

### to_date 函数的使用方法 Hive 中的 `to_date` 函数用于将时间戳或符合日期格式的字符串转换为 `yyyy-MM-dd` 格式的日期字符串。该函数常用于日期字段的提取和格式化操作。 #### 语法 ```sql to_date(string date_str) ``` 或者 ```sql to_date(timestamp date_ts) ``` - 当输入为字符串时,字符串必须符合 `yyyy-MM-dd HH:mm:ss` 格式,函数会提取其中的日期部分,返回 `yyyy-MM-dd` 格式的日期。 - 当输入为时间戳时,函数直接提取日期部分,返回 `yyyy-MM-dd` 格式的日期。 #### 示例 1. **从字符串提取日期** ```sql SELECT to_date('2023-10-05 14:30:00'); ``` 输出结果: ``` 2023-10-05 ``` 2. **从时间戳提取日期** ```sql SELECT to_date(from_unixtime(unix_timestamp())); ``` 输出结果(根据当前时间): ``` 2024-06-20 ``` 3. **结合其他函数使用** ```sql SELECT to_date('2024-05-20 08:45:30') AS extracted_date; ``` 输出结果: ``` 2024-05-20 ``` 4. **处理表中的日期字段** 假设有一个表 `orders`,其字段 `order_time` 存储了时间戳数据,可以通过以下语句提取日期: ```sql SELECT order_id, to_date(order_time) AS order_date FROM orders; ``` #### 注意事项 - `to_date` 函数仅支持 `yyyy-MM-dd HH:mm:ss` 格式的字符串或时间戳输入,若输入格式不符合要求,可能导致解析错误[^1]。 - 如果需要对日期进行更复杂的格式化,可以结合 `date_format` 函数实现。 --- ### to_date 与其他日期函数的对比 1. **与 `from_unixtime` 的区别** - `to_date` 用于提取日期部分,返回 `yyyy-MM-dd` 格式。 - `from_unixtime` 用于将时间戳转换为完整的 `yyyy-MM-dd HH:mm:ss` 格式字符串。 2. **与 `date_format` 的区别** - `to_date` 仅能返回 `yyyy-MM-dd` 格式日期。 - `date_format` 可以按照指定格式输出日期,例如只提取月份或年份。 示例: ```sql SELECT date_format('2024-05-20', 'yyyy-MM') AS formatted_date; ``` 输出结果: ``` 2024-05 ``` --- ### 示例应用场景 1. **按日期统计订单数量** ```sql SELECT to_date(order_time) AS order_date, COUNT(*) AS total_orders FROM orders GROUP BY to_date(order_time); ``` 2. **筛选特定日期范围内的数据** ```sql SELECT * FROM sales WHERE to_date(sale_time) BETWEEN '2024-01-01' AND '2024-01-31'; ``` --- ### 总结 `to_date` 函数在 Hive 中常用于从时间戳或完整日期字符串中提取日期部分,其输出格式为 `yyyy-MM-dd`。该函数适用于简单的日期提取场景,若需要更复杂的格式化,可以结合 `date_format` 函数使用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值