2017-12-19 17 views
0

2つの異なる列に予定の開始日と終了日を格納するテーブルがあります。どちらも日時です。古いデータを簡単にインポートできます。私は構造を変更することはできません。私はMicrosoft SQL Serverを使用しています。2つの日付タイムスタンプと最初の日付と2番目の日付とを結合します。

ApptDate     ApptTime 
2012-02-16 00:00:00.000 1899-12-30 11:45:00.000 
2012-02-16 00:00:00.000 1899-12-30 13:15:00.000 
2012-02-16 00:00:00.000 1899-12-30 13:30:00.000 

私がする必要があるのは、これらの2つの日付時刻を1つにまとめることです。私はストアドプロシージャを呼び出しています。私の質問は、これを行うための最善の方法は何ですか?

ALTER PROCEDURE [dbo].[GetTodaysAppointsNonRepeating] 
    -- Add the parameters for the stored procedure here 
    @DateToday DATETIME, @ClientID INT 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    SELECT a.ID, a.ApptDate, a.ApptTime, a.ApptLength, a.checkedin, a.Entered, a.UserID, a.ProviderID, a.PatientID, CASE WHEN patient.FirstName is null then a.Name END as name, 
    CASE WHEN HomePhone !='' then HomePhone WHEN WorkPhone !='' THEN WorkPhone ELSE CellPhone END as Telephone 
    FROM Appointments as a INNER JOIN Patient on a.PatientID = patient.id and 
    a.clientid = patient.clientid WHERE ApptDate = @DateToday and a.ClientID = @ClientID 
    AND RepeatType = 'N' 
END 
+0

?そのコードは製品固有です。 – jarlh

+0

[日付と時刻の結合(連結)](https://stackoverflow.com/questions/18622384/combining-concatenating-date-and-time-into-a-datetime)の重複が考えられます。選択した答えをAaron Bertrandからチェックしてください。 –

+0

SQL Serverのように見えますか?確認してください。 – MatBailie

答えて

0

これは、2つの日時フィールドを互いに結合する方法を次のとおりです。

DBMSは、使用している
SELECT DATETIMEFROMPARTS(YEAR(ApptDate) 
         ,MONTH(ApptDate) 
         ,DAY(ApptDate) 
         ,DATEPART(HOUR,ApptTime) 
         ,DATEPART(MINUTE,ApptTime) 
         ,DATEPART(SECOND,ApptTime) 
         ,DATEPART(MILLISECOND,ApptTime)) 
+0

また、明らかにT-SQLを想定しているように、より直接的には? 'DATEADD(ミリ秒、DATEDIFF(ミリ秒、 '1899-12-30'、ApptTime)、ApptDate)'? – MatBailie

関連する問題