订单日期sql选择
你好! 我有一个充满日期时间数据类型的表,它存储为nvarchar。 我需要从表中进行选择,并按天对结果进行排序 将日期插入到该形状中订单日期sql选择,sql,sql-server,select,nvarchar,Sql,Sql Server,Select,Nvarchar,你好! 我有一个充满日期时间数据类型的表,它存储为nvarchar。 我需要从表中进行选择,并按天对结果进行排序 将日期插入到该形状中 >Thursday 11:30-12:30 >Sunday 08:00-09:00 >Sunday 08:00-09:00 >Sunday 08:00-09:00 >Sunday 08:00-09:00 >Monday 08:00-09:00 >Monday 09:00-10:00 >Monday 08:00-09
>Thursday 11:30-12:30
>Sunday 08:00-09:00
>Sunday 08:00-09:00
>Sunday 08:00-09:00
>Sunday 08:00-09:00
>Monday 08:00-09:00
>Monday 09:00-10:00
>Monday 08:00-09:00
我试过用这个
SELECT TOP 1000 [Class_Time_ID] ,[Class_ID] ,[Class_Date]
FROM [School].[dbo].[Class_Time_Table]
ORDER BY CASE Class_Date WHEN 'Monday' THEN 2
WHEN 'Tuesday' THEN 3
WHEN 'Wednesday' THEN 4
WHEN 'Thursday' THEN 5
WHEN 'Sunday' THEN 1
end
一个课程日期
(例如“星期一09:00-10:00”
)并不等于“星期一”
,但它就像“星期一%”
:
SELECT
class_time_id,
class_id,
class_date
FROM school.dbo.class_time_table
ORDER BY CASE
WHEN class_date LIKE 'Monday%' THEN 2
WHEN class_date LIKE 'Tuesday%' THEN 3
WHEN class_date LIKE 'Wednesday%' THEN 4
WHEN class_date LIKE 'Thursday%' THEN 5
WHEN class_date LIKE 'Sunday%' THEN 1
END
使用
交叉应用
可能会有所帮助,因为它允许在select
和where
子句中为大小写表达式
使用别名。e、 g
MS SQL Server 2014架构设置:
CREATE TABLE Class_Time_Table
([Class_Date] varchar(20), [Class_Time_ID] int ,[Class_ID] int)
;
INSERT INTO Class_Time_Table
([Class_Date])
VALUES
('Thursday 11:30-12:30'),
('Sunday 08:00-09:00'),
('Sunday 08:00-09:00'),
('Sunday 08:00-09:00'),
('Sunday 08:00-09:00'),
('Monday 08:00-09:00'),
('Monday 09:00-10:00'),
('Monday 08:00-09:00')
;
SELECT
ctt.*
, ca.day_of_week,ca.start_time,ca.end_time
FROM Class_Time_Table ctt
CROSS APPLY (
SELECT
CASE
WHEN class_date LIKE 'Monday%' THEN 2
WHEN class_date LIKE 'Tuesday%' THEN 3
WHEN class_date LIKE 'Wednesday%' THEN 4
WHEN class_date LIKE 'Thursday%' THEN 5
WHEN class_date LIKE 'Sunday%' THEN 1
END AS day_of_week
, SUBSTRING(RIGHT(class_date, 11), 1, 5) AS start_time
, SUBSTRING(RIGHT(class_date, 5) , 1, 5) AS end_time
) ca
order by day_of_week, start_time, end_time
| Class_Date | Class_Time_ID | Class_ID | day_of_week | start_time | end_time |
|----------------------|---------------|----------|-------------|------------|----------|
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Monday 08:00-09:00 | (null) | (null) | 2 | 08:00 | 09:00 |
| Monday 08:00-09:00 | (null) | (null) | 2 | 08:00 | 09:00 |
| Monday 09:00-10:00 | (null) | (null) | 2 | 09:00 | 10:00 |
| Thursday 11:30-12:30 | (null) | (null) | 5 | 11:30 | 12:30 |
查询1:
CREATE TABLE Class_Time_Table
([Class_Date] varchar(20), [Class_Time_ID] int ,[Class_ID] int)
;
INSERT INTO Class_Time_Table
([Class_Date])
VALUES
('Thursday 11:30-12:30'),
('Sunday 08:00-09:00'),
('Sunday 08:00-09:00'),
('Sunday 08:00-09:00'),
('Sunday 08:00-09:00'),
('Monday 08:00-09:00'),
('Monday 09:00-10:00'),
('Monday 08:00-09:00')
;
SELECT
ctt.*
, ca.day_of_week,ca.start_time,ca.end_time
FROM Class_Time_Table ctt
CROSS APPLY (
SELECT
CASE
WHEN class_date LIKE 'Monday%' THEN 2
WHEN class_date LIKE 'Tuesday%' THEN 3
WHEN class_date LIKE 'Wednesday%' THEN 4
WHEN class_date LIKE 'Thursday%' THEN 5
WHEN class_date LIKE 'Sunday%' THEN 1
END AS day_of_week
, SUBSTRING(RIGHT(class_date, 11), 1, 5) AS start_time
, SUBSTRING(RIGHT(class_date, 5) , 1, 5) AS end_time
) ca
order by day_of_week, start_time, end_time
| Class_Date | Class_Time_ID | Class_ID | day_of_week | start_time | end_time |
|----------------------|---------------|----------|-------------|------------|----------|
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Monday 08:00-09:00 | (null) | (null) | 2 | 08:00 | 09:00 |
| Monday 08:00-09:00 | (null) | (null) | 2 | 08:00 | 09:00 |
| Monday 09:00-10:00 | (null) | (null) | 2 | 09:00 | 10:00 |
| Thursday 11:30-12:30 | (null) | (null) | 5 | 11:30 | 12:30 |
:
CREATE TABLE Class_Time_Table
([Class_Date] varchar(20), [Class_Time_ID] int ,[Class_ID] int)
;
INSERT INTO Class_Time_Table
([Class_Date])
VALUES
('Thursday 11:30-12:30'),
('Sunday 08:00-09:00'),
('Sunday 08:00-09:00'),
('Sunday 08:00-09:00'),
('Sunday 08:00-09:00'),
('Monday 08:00-09:00'),
('Monday 09:00-10:00'),
('Monday 08:00-09:00')
;
SELECT
ctt.*
, ca.day_of_week,ca.start_time,ca.end_time
FROM Class_Time_Table ctt
CROSS APPLY (
SELECT
CASE
WHEN class_date LIKE 'Monday%' THEN 2
WHEN class_date LIKE 'Tuesday%' THEN 3
WHEN class_date LIKE 'Wednesday%' THEN 4
WHEN class_date LIKE 'Thursday%' THEN 5
WHEN class_date LIKE 'Sunday%' THEN 1
END AS day_of_week
, SUBSTRING(RIGHT(class_date, 11), 1, 5) AS start_time
, SUBSTRING(RIGHT(class_date, 5) , 1, 5) AS end_time
) ca
order by day_of_week, start_time, end_time
| Class_Date | Class_Time_ID | Class_ID | day_of_week | start_time | end_time |
|----------------------|---------------|----------|-------------|------------|----------|
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Sunday 08:00-09:00 | (null) | (null) | 1 | 08:00 | 09:00 |
| Monday 08:00-09:00 | (null) | (null) | 2 | 08:00 | 09:00 |
| Monday 08:00-09:00 | (null) | (null) | 2 | 08:00 | 09:00 |
| Monday 09:00-10:00 | (null) | (null) | 2 | 09:00 | 10:00 |
| Thursday 11:30-12:30 | (null) | (null) | 5 | 11:30 | 12:30 |
什么是表模式?到目前为止你试过什么?你自己解决过这个问题吗?我试过使用这个从[School].[dbo].[Class\u Time\u Table]中选出的前1000名[Class\u Time\u ID],[Class\u ID],[Class\u Date]按案例排序课程日期为“星期一”,其次为“星期二”,最后为“星期三”,最后为“星期四”,最后为“星期四”,最后为“星期日”,最后为1。如果你想得到答案,请学习如何提问。还有,到目前为止,我们做了哪些尝试?