Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
订单日期sql选择_Sql_Sql Server_Select_Nvarchar - Fatal编程技术网

订单日期sql选择

订单日期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

你好! 我有一个充满日期时间数据类型的表,它存储为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: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。如果你想得到答案,请学习如何提问。还有,到目前为止,我们做了哪些尝试?