oracle中比较多个列时间大小,并返回时间小的字段名,为空的列不参与比较
时间: 2023-09-06 15:13:04 浏览: 37
可以使用以下语句来实现:
```
SELECT
CASE
WHEN col1 IS NULL THEN
CASE
WHEN col2 IS NULL THEN NULL
ELSE 'col2'
END
WHEN col2 IS NULL THEN 'col1'
WHEN col1 <= col2 THEN 'col1'
ELSE 'col2'
END AS smaller_col
FROM your_table;
```
其中,`col1`和`col2`为需要比较的两个时间字段,`your_table`为表名。这个查询语句会返回一个包含一列的结果集,该列会返回时间小的字段名,如果两个字段都为空,则返回`NULL`。
相关问题
oracle中比较四个列时间大小,并返回时间小的字段名,为空的列不参与比较
可以使用 `LEAST` 函数来实现:
```sql
SELECT LEAST(COALESCE(col1, to_date('9999-12-31', 'YYYY-MM-DD')),
COALESCE(col2, to_date('9999-12-31', 'YYYY-MM-DD')),
COALESCE(col3, to_date('9999-12-31', 'YYYY-MM-DD')),
COALESCE(col4, to_date('9999-12-31', 'YYYY-MM-DD')))
FROM your_table;
```
其中,`COALESCE` 函数用于转换 `NULL` 值为一个较大的日期值,确保 `LEAST` 函数不会返回 `NULL` 值。
如果需要返回时间小的字段名,可以使用类似下面的语句:
```sql
SELECT CASE LEAST(COALESCE(col1, to_date('9999-12-31', 'YYYY-MM-DD')),
COALESCE(col2, to_date('9999-12-31', 'YYYY-MM-DD')),
COALESCE(col3, to_date('9999-12-31', 'YYYY-MM-DD')),
COALESCE(col4, to_date('9999-12-31', 'YYYY-MM-DD')))
WHEN col1 THEN 'col1'
WHEN col2 THEN 'col2'
WHEN col3 THEN 'col3'
WHEN col4 THEN 'col4'
END AS min_col_name
FROM your_table;
```
oracle中比较两个时间大小,空值不参与比较,并返回时间小的字段名
可以使用以下 SQL 语句实现:
```
SELECT
CASE
WHEN time1 < time2 THEN 'time1'
ELSE 'time2'
END AS smaller_time
FROM table_name
WHERE time1 IS NOT NULL AND time2 IS NOT NULL
```
其中,`table_name` 为需要比较的表名,`time1` 和 `time2` 为需要比较的时间字段名。使用 `CASE` 语句判断哪个时间更小,然后 `WHERE` 子句中过滤掉值为空的行,确保空值不参与比较。最后返回时间更小的字段名。