web-dev-qa-db-ja.com

SQLクエリでの日付と時刻の分割

次のようなテーブルがあります。

表:

CUSTTRIPID  TPTRIPID    CUSTOMERID  ENTRY_TOLLTXNID EXIT_TOLLTXNID  ENTRYTRIPDATETIME   EXITTRIPDATETIME    TRIPIDENTMETHOD TRIPCHARGETYPE  ENTRYLANEID ENTRYPLAZAID    EXITLANEID  EXITPLAZAID VEHICLENUMBER   VEHICLESTATE    VEHICLECLASS    VEHICLEID   TAGREFID    TOLLAMOUNT  FEEAMOUNTS  DISCOUNTSAMOUNT OUTSTANDINGAMOUNT   TRIPSTAGEID TRIPSTATUSID    TRIPSTATUSDATE  POSTEDDATE  PAYMENTSTATUSID CREATEDDATE CREATEDUSER UPDATEDDATE UPDATEDUSER REFLINKTRIPID   PLAZA
39038181    34040337    20272679    35126165    35126165    2017-05-04 08:15:54.000 2017-05-04 08:15:54.000 980 P   NULL    NULL    NULL    NULL    KA03D8435   KA  VC10    272614  34161FA8203289720249F4C0    30.00   0.00    0.00    30.00   3   1   2017-05-04 08:31:54.657 2017-05-04 08:31:54.657 456 2017-05-04 08:32:11.130 TRIPPOST    2017-05-04 08:32:11.130 TRIPPOST    0   BangaloreNelamangalaTollPlaza

時間とともに2つ以上のレコードをCUSTOMERID取得したいので、このクエリを作成して結果を得ました。

メインクエリ:

SELECT   TOP (10) [CUSTOMERID] , [ENTRYTRIPDATETIME]  
FROM     [ISSUER].[TOLLPLUS].[TP_CUSTOMERTRIPS] 
GROUP BY [CUSTOMERID],[ENTRYTRIPDATETIME] 
HAVING   COUNT(*) > 2

結果:

CUSTOMERID  ENTRYTRIPDATETIME
20063381    2016-12-08 00:24:35.000
20010438    2016-12-16 22:16:55.000
20015278    2017-01-28 05:18:20.000
20108092    2017-02-10 00:37:09.000
20013275    2017-01-06 07:42:05.000
20018833    2017-01-27 04:53:32.000
20113994    2017-01-27 01:13:44.000
20199820    2017-01-27 05:34:24.000
20124122    2017-02-01 02:47:01.000
20240710    2017-03-21 13:02:18.000

しかし、私の要件は、日付と時刻をabobe結果で分割することです。つまり、3つの列があるはずなので、私の質問は、以下のクエリをどこに書き込むことができるかですMain Query

CONVERT(VARCHAR(10),[ENTRYTRIPDATETIME],101) as DatePart,
CONVERT(VARCHAR(10),[ENTRYTRIPDATETIME],108) as TimePart
2
Bhaskar Das

あなたはそれをほとんど得る:

SELECT   TOP (10) [CUSTOMERID], 
         CONVERT(VARCHAR(20), [ENTRYTRIPDATETIME], 101) AS DATEPART,
         CONVERT(VARCHAR(20), [ENTRYTRIPDATETIME], 108) AS TIMEPART
FROM     [TP_CUSTOMERTRIPS] 
GROUP BY [CUSTOMERID],[ENTRYTRIPDATETIME] 
HAVING   COUNT(*) > 2;
SELECT   TOP (10) [CUSTOMERID], 
         CONVERT(VARCHAR(20), [ENTRYTRIPDATETIME], 101) AS DATEPART,
         CONVERT(VARCHAR(20), [ENTRYTRIPDATETIME], 108) AS TIMEPART
FROM     [TP_CUSTOMERTRIPS] 
GROUP BY [CUSTOMERID],[ENTRYTRIPDATETIME] 
HAVING   COUNT(*) > 2;
GO
 CUSTOMERID | DATEPART | TIMEPART 
 ---------:| :------ :------- 
 20063381 | 2016年12月8日| 00:24:35 
 20010438 | 2016年12月16日| 22:16:55 
 20013275 | 2017年1月6日| 07:42:05 
 20113994 | 2017年1月27日| 01:13:44 
 20018833 | 2017年1月27日| 04:53:32 
 20199820 | 2017年1月27日| 05:34:24 
 20015278 | 2017年1月28日| 05:18:20 
 20124122 | 2017年2月1日| 02:47:01 
 20108092 | 2017年2月10日| 00:37:09 
 20240710 | 2017年3月21日| 13:02:18 

db <> fiddle ---(ここ

2
McNets

別の方法:

SELECT   TOP (10) [CUSTOMERID], 
         [DATEPART] = CONVERT(date, [ENTRYTRIPDATETIME]),
         [TIMEPART] = CONVERT(time, [ENTRYTRIPDATETIME])
FROM     [ISSUER].[TOLLPLUS].[TP_CUSTOMERTRIPS] 
GROUP BY [CUSTOMERID],[ENTRYTRIPDATETIME] 
HAVING   COUNT(*) > 2;

また、プレゼンテーションレイヤーでこれができないのはなぜですか?

2
Aaron Bertrand