2016-09-08 3 views
1

Bei Verwendung des eingebauten Steckplatzes AMAZON.DATE wird "nächste Woche" als 2016-W38 pro developer reference interpretiert.Alexa eingebauten Steckplatz AMAZON.DATE

Utterances, die nur eine bestimmte Woche (wie „diese Woche“ oder „nächste Woche“) abzubilden, konvertiert ein Datum angibt, die Wochennummer: 2015-W49.

Ich versuche, dies in SQL zu analysieren. Ist die erste Woche des Jahres W1 oder W01 bei Nutzung der Alexa-Dienste? Vielen Dank.

Antwort

0

AKTUALISIERT: Datumsangaben sind im ISO-8601-Datumsformat. Erste Woche ist W01, es gibt kein W00.

Referenz: https://en.wikipedia.org/wiki/ISO_8601#Dates

Quelle: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interaction-model-reference

Ursprüngliche Antwort:

Ich kann nicht docs finden, aber hier ist die Antwort ...

  • Heute ist Mi 28. September, Tag 272.
  • Alexa sagt, das ist 2016-W39. (Ich habe gerade nachgesehen).
  • 2016 begann an einem Freitag, so begann W39 letzten Freitag am Tag 267, die 38 Wochen nach dem 1. Januar ist. (267/7 = 38,14).
  • Zählen Sie 38 Wochen zum Anfang des Jahres zurück.

Daher heißt die erste Woche des Jahres W1.

+0

Vielen Dank für das Graben. – smoore4

+0

Ich werde einen Link zur Dokumentation hinzufügen, wenn ich einen finden kann. – python1981

0

So habe ich den integrierten AMAZON.DATE-Steckplatz mit einer gespeicherten SQL Server-Prozedur analysiert.

CREATE PROCEDURE [dbo].[procMomaAlexaExhibitions] 

@p_alexa_date VARCHAR(50) = '' 

AS 
BEGIN 

SET NOCOUNT ON; 

DECLARE @p_start_date VARCHAR(10) = '' 
DECLARE @p_end_date VARCHAR(10) = '' 

--SET @p_alexa_date = '2015-W20-WE' 

-- Today if null 
IF(@p_alexa_date = '' OR @p_alexa_date IS NULL) 
BEGIN 
SET @p_start_date = (SELECT CONVERT(VARCHAR(10), GETDATE(), 121)) 
SET @p_end_date = (SELECT CONVERT(VARCHAR(10), GETDATE(), 121)) 
END 

-- Alexa provided a normal date 
IF(ISDATE(@p_alexa_date) = 1) 
BEGIN 
SET @p_start_date = CONVERT(VARCHAR(10), @p_alexa_date, 121) 
SET @p_end_date = CONVERT(VARCHAR(10), @p_alexa_date, 121) 
END 

-- Alexa provided a year-month 
IF(LEN(@p_alexa_date) <= 8 AND ISNUMERIC(REPLACE(@p_alexa_date,'-','')) = 1) 
BEGIN 
SET @p_start_date = @p_alexa_date + '-01' 
SET @p_end_date = @p_alexa_date + '-31' 
END 

-- weekend 
IF(RIGHT(@p_alexa_date, 3) = '-WE') 
    BEGIN 
    DECLARE @p_week VARCHAR(2) 
    DECLARE @p_year VARCHAR(4) 
    DECLARE @p_start_date_wk VARCHAR(10) = '' 
    DECLARE @p_end_date_wk VARCHAR(10) = '' 

    SET @p_week = REPLACE(SUBSTRING(@p_alexa_date,7, LEN(@p_alexa_date)),'-WE','') 
    SET @p_year = LEFT(@p_alexa_date, 4) 

    SET @p_start_date_wk = CONVERT(VARCHAR(10), DATEADD(wk, DATEDIFF(wk, 6, '1/1/' + @p_year) + (@p_week-1), 6), 121) 
    SET @p_end_date_wk = CONVERT(VARCHAR(10), DATEADD(wk, DATEDIFF(wk, 5, '1/1/' + @p_year) + (@p_week-1), 5), 121)  

    SET @p_start_date = CASE WHEN datename(weekday, CAST(@p_start_date_wk AS smalldatetime)) = 'Saturday' THEN CONVERT(VARCHAR(10), CAST(@p_start_date_wk AS smalldatetime), 121) 
          WHEN datename(weekday, CAST(@p_start_date_wk AS smalldatetime) + 1) = 'Saturday' THEN CONVERT(VARCHAR(10), CAST(@p_start_date_wk AS smalldatetime) + 1, 121) 
          WHEN datename(weekday, CAST(@p_start_date_wk AS smalldatetime) + 2) = 'Saturday' THEN CONVERT(VARCHAR(10), CAST(@p_start_date_wk AS smalldatetime) + 2, 121) 
          WHEN datename(weekday, CAST(@p_start_date_wk AS smalldatetime) + 3) = 'Saturday' THEN CONVERT(VARCHAR(10), CAST(@p_start_date_wk AS smalldatetime) + 3, 121) 
          WHEN datename(weekday, CAST(@p_start_date_wk AS smalldatetime) + 4) = 'Saturday' THEN CONVERT(VARCHAR(10), CAST(@p_start_date_wk AS smalldatetime) + 4, 121) 
          WHEN datename(weekday, CAST(@p_start_date_wk AS smalldatetime) + 5) = 'Saturday' THEN CONVERT(VARCHAR(10), CAST(@p_start_date_wk AS smalldatetime) + 5, 121) 
          WHEN datename(weekday, CAST(@p_start_date_wk AS smalldatetime) + 6) = 'Saturday' THEN CONVERT(VARCHAR(10), CAST(@p_start_date_wk AS smalldatetime) + 6, 121) 
          END 
    SET @p_end_date = CASE WHEN datename(weekday, CAST(@p_end_date_wk AS smalldatetime)) = 'Sunday' THEN CONVERT(VARCHAR(10), CAST(@p_end_date_wk AS smalldatetime), 121) 
          WHEN datename(weekday, CAST(@p_end_date_wk AS smalldatetime) + 1) = 'Sunday' THEN CONVERT(VARCHAR(10), CAST(@p_end_date_wk AS smalldatetime) + 1, 121) 
          WHEN datename(weekday, CAST(@p_end_date_wk AS smalldatetime) + 2) = 'Sunday' THEN CONVERT(VARCHAR(10), CAST(@p_end_date_wk AS smalldatetime) + 2, 121) 
          WHEN datename(weekday, CAST(@p_end_date_wk AS smalldatetime) + 3) = 'Sunday' THEN CONVERT(VARCHAR(10), CAST(@p_end_date_wk AS smalldatetime) + 3, 121) 
          WHEN datename(weekday, CAST(@p_end_date_wk AS smalldatetime) + 4) = 'Sunday' THEN CONVERT(VARCHAR(10), CAST(@p_end_date_wk AS smalldatetime) + 4, 121) 
          WHEN datename(weekday, CAST(@p_end_date_wk AS smalldatetime) + 5) = 'Sunday' THEN CONVERT(VARCHAR(10), CAST(@p_end_date_wk AS smalldatetime) + 5, 121) 
          WHEN datename(weekday, CAST(@p_end_date_wk AS smalldatetime) + 6) = 'Sunday' THEN CONVERT(VARCHAR(10), CAST(@p_end_date_wk AS smalldatetime) + 6, 121) 
          END 
    END 

-- not a weekend 
IF((@p_alexa_date LIKE '%-W%') AND (RIGHT(@p_alexa_date, 3) <> '-WE')) 
    BEGIN 

    SET @p_week = SUBSTRING(@p_alexa_date,7, LEN(@p_alexa_date)) 
    SET @p_year = LEFT(@p_alexa_date, 4) 

    SET @p_start_date = CONVERT(VARCHAR(10), DATEADD(wk, DATEDIFF(wk, 6, '1/1/' + @p_year) + (@p_week-1), 6), 121) 
    SET @p_end_date = CONVERT(VARCHAR(10), DATEADD(wk, DATEDIFF(wk, 5, '1/1/' + @p_year) + (@p_week-1), 5), 121)  

    END 

Von dort aus können Sie solche Dinge in SQL tun. FYI

WHERE (ExhVenuesXrefs.BeginISODate <= @p_start_date) 
AND (ExhVenuesXrefs.EndISODate >= @p_end_date)