Pourquoi le SQL est important dans Salesforce Marketing Cloud
Salesforce Marketing Cloud (SFMC) est une plateforme puissante pour gérer les données client, concevoir des campagnes personnalisées et analyser les performances. Bien que les filtres par glisser-déposer offrent un moyen simple de segmenter les données, ils sont souvent insuffisants pour les cas d’utilisation avancés. C’est là que le SQL (Structured Query Language) devient essentiel.
Dans SFMC, le SQL vous permet de :
- Personnaliser la sortie : Définir des colonnes spécifiques et les renommer pour plus de lisibilité.
- Gérer des conditions complexes : Appliquer une logique de filtrage avancée au-delà des filtres.
- Intégrer plusieurs sources : Combiner des données issues de plusieurs Data Extensions ou Data Views.
- Automatiser des processus : Utiliser le SQL dans les Query Activities au sein de l’Automation Studio pour des segmentations planifiées.
Guide du débutant pour le SQL dans SFMC
Contrairement au SQL standard, SFMC ne prend en charge que l’instruction SELECT
.
Vous pouvez extraire des données, mais vous ne pouvez pas les modifier directement dans la
base (INSERT
, UPDATE
et DELETE
ne sont pas pris en charge).
Voici un aperçu rapide de la syntaxe de base :
SELECT column1, column2, ... FROM DataExtensionName WHERE condition;
Exemple pratique
Supposons que vous souhaitiez extraire tous les abonnés actifs :
SELECT SubscriberKey, EmailAddress FROM _Subscribers WHERE Status = 'Active';
Techniques SQL avancées dans SFMC
1. JOIN : Combiner des sources de données
SFMC vous permet de joindre les données de plusieurs tables. Par exemple, si vous souhaitez combiner les données d’abonnés avec leurs données d’engagement :
SELECT s.SubscriberKey, s.EmailAddress, o.EventDate AS OpenDate FROM _Subscribers s INNER JOIN _Open o ON s.SubscriberKey = o.SubscriberKey WHERE o.EventDate > DATEADD(day, -30, GETDATE());
2. Instructions CASE : Logique conditionnelle
Vous pouvez créer de nouvelles colonnes de manière dynamique en fonction de conditions. Par exemple, pour catégoriser les abonnés selon leur domaine de messagerie :
SELECT SubscriberKey, EmailAddress, CASE WHEN EmailAddress LIKE '%@gmail.com' THEN 'Gmail User' WHEN EmailAddress LIKE '%@yahoo.com' THEN 'Yahoo User' ELSE 'Other' END AS EmailCategory FROM _Subscribers;
3. Agrégations et regroupements
Analysez vos données grâce à des fonctions comme COUNT
, SUM
ou
AVG
. Par exemple, pour compter les envois d’e-mails par domaine :
SELECT SUBSTRING(EmailAddress, CHARINDEX('@', EmailAddress) + 1, LEN(EmailAddress)) AS Domain, COUNT(*) AS TotalSends FROM _Sent GROUP BY SUBSTRING(EmailAddress, CHARINDEX('@', EmailAddress) + 1, LEN(EmailAddress)) ORDER BY TotalSends DESC;
Surmonter les limites du SQL dans SFMC
- Optimisez les données sources : utilisez des filtres ou des paramètres de rétention pour limiter la taille des Data Extensions de départ.
- Fractionnez les requêtes : divisez les requêtes complexes en parties plus petites et plus gérables.
Cas d’usage réel : Campagne de réengagement
Ciblez les abonnés qui :
- N’ont pas ouvert d’e-mail depuis plus de 90 jours.
- Appartiennent au segment client « Premium ».
SELECT s.SubscriberKey, s.EmailAddress FROM _Subscribers s LEFT JOIN _Open o ON s.SubscriberKey = o.SubscriberKey WHERE s.Status = 'Active' AND s.SubscriberKey IN (SELECT SubscriberKey FROM PremiumCustomers) AND (o.EventDate IS NULL OR o.EventDate < DATEADD(day, -90, GETDATE()));
L’instruction SELECT dans SFMC SQL
L’instruction SELECT
ouvre chaque requête dans Salesforce Marketing Cloud SQL.
Elle permet de choisir les colonnes à extraire des Data Extensions et des Data Views,
et autorise la création de nouvelles données.
Utilisation de base
La version la plus simple est SELECT *
, qui cible toutes les colonnes
disponibles. Cependant, cela n’est pas recommandé, car cela réduit la lisibilité
et peut affecter les performances :
SELECT * FROM DataExtensionName;
Au lieu de cela, ciblez explicitement les colonnes par leur nom :
SELECT ContactKey, EmailAddress FROM DataExtensionName;
Pour les noms de colonnes contenant des espaces ou des caractères spéciaux, utilisez des crochets :
SELECT ContactKey, EmailAddress, [External Contact Id] FROM DataExtensionName;
Aliasing avec AS
Utilisez le mot-clé AS
pour renommer des colonnes ou ajouter des valeurs personnalisées :
SELECT ContactKey, EmailAddress, [External Contact Id] AS ExternalContactId, 'Lead' AS RecordType, GETUTCDATE() AS ImportDate FROM DataExtensionName;
Concaténer des valeurs
Créez de nouvelles colonnes en combinant des données existantes, par exemple pour concaténer le prénom et le nom :
SELECT SubscriberKey, EmailAddress, FirstName + ' ' + LastName AS FullName FROM DataExtensionName;
Utiliser la clause TOP
Limitez le nombre de lignes renvoyées grâce à la clause TOP
:
SELECT TOP 10 SubscriberKey, PreferredChannel FROM DataExtensionName;
Pour un pourcentage de lignes, utilisez TOP PERCENT
:
SELECT TOP 10 PERCENT SubscriberKey, QuizScore FROM DataExtensionName ORDER BY QuizScore DESC;
WITH TIES
Incluez les lignes qui correspondent à la dernière valeur de la colonne triée :
SELECT TOP 3 WITH TIES SubscriberKey, QuizScore FROM DataExtensionName ORDER BY QuizScore DESC;
DISTINCT pour éliminer les doublons
Utilisez DISTINCT
pour récupérer des valeurs uniques :
SELECT DISTINCT Domain FROM DataExtensionName ORDER BY Domain;
Bonnes pratiques
- Ciblez toujours explicitement les colonnes pour une meilleure lisibilité.
- Utilisez des alias pour homogénéiser la sortie.
- Combinez
TOP
avecORDER BY
pour des résultats prévisibles. - Utilisez
DISTINCT
pour dédupliquer et nettoyer les données extraites.
Base de la clause FROM dans SFMC SQL
La seule instruction SELECT
ne suffit pas. Une fois que vous avez identifié
les données à extraire, vous devez préciser la table (Data Extension ou System Data View)
FROM laquelle la requête ira récupérer ces colonnes.
SELECT ContactKey, EmailAddress FROM MasterSubscriberDE;
Si le nom de votre Data Extension contient des espaces ou des tirets, utilisez des crochets :
SELECT ContactKey, EmailAddress FROM [Master-Subscriber DE];
System Data Views
Salesforce Marketing Cloud masque les System Data Views dans l’interface, mais vous pouvez
les interroger directement pour récupérer des données de tracking ou techniques, comme les
Email Sends, Opens, Bounces, etc. Utilisez un underscore (_
) en préfixe :
SELECT JobID, EmailID, EmailName, EmailSubject, EmailSendDefinition, DeliveredTime FROM _Job;
Enterprise Data Extensions
Les Data Extensions partagées et synchronisées se situent au niveau de la Business Unit parente. Pour les interroger depuis la BU parente, utilisez la notation habituelle :
SELECT ContactKey, EmailAddress FROM SharedDataExtension;
Depuis une Business Unit enfant, utilisez le préfixe Ent.
:
SELECT ContactKey, EmailAddress FROM Ent.SharedDataExtension;
Enterprise System Data Views
En utilisant le préfixe Ent.
avec les System Data Views, vous pouvez
interroger toutes les données au niveau de la BU parente :
SELECT SubscriberKey, EmailAddress, DateJoined, DateUnsubscribed FROM Ent._Subscribers;
Interrogation héritée (Deprecated)
Autrefois, vous pouviez interroger les Data Extensions d’une BU enfant à partir de la BU parente en utilisant le MID de la BU enfant comme préfixe. Cette fonctionnalité est obsolète depuis 2020 :
SELECT ContactKey, EmailAddress FROM 5123456.DataExtensionOnChildBU;
La solution de contournement consiste à utiliser les Data Extensions partagées.
Bonnes pratiques
- Évitez d’interroger des Data Extensions dont la largeur cumulée des champs dépasse 4000 caractères pour maintenir les performances.
- Utilisez le préfixe
Ent.
avec précaution pour accéder aux données entre Business Units. - Exploitez les Data Extensions partagées pour éviter les erreurs inattendues dans les automatisations.
SFMC SQL JOIN
Data Extensions, System Data Views… Grâce à l’instruction JOIN
, vous pouvez
regrouper toutes les informations dans une seule requête. Toute la puissance du SQL
réside dans la combinaison de plusieurs sources de données.
Exemple de requête
Vérifiez qui a ouvert l’e-mail et quand, en interrogeant la System Data View _Open
:
SELECT wel.SubscriberKey, wel.EmailAddress, o.EventDate AS OpenDate FROM WelcomeCampaignSegment AS wel JOIN _Open AS o ON o.SubscriberKey = wel.SubscriberKey;
Types de JOIN
Inner Join
Le INNER JOIN
renvoie les enregistrements présents dans les deux tables :
SELECT wel.SubscriberKey, wel.EmailAddress, o.EventDate AS OpenDate FROM WelcomeCampaignSegment AS wel INNER JOIN _Open AS o ON o.SubscriberKey = wel.SubscriberKey;
Left et Right Joins
LEFT JOIN
inclut tous les enregistrements de la première table, et les résultats
correspondants de la deuxième table :
SELECT wel.SubscriberKey, wel.EmailAddress, o.EventDate AS OpenDate FROM WelcomeCampaignSegment AS wel LEFT JOIN _Open AS o ON o.SubscriberKey = wel.SubscriberKey;
Utilisez WHERE
avec IS NULL
pour exclure :
SELECT wel.SubscriberKey, wel.EmailAddress FROM WelcomeCampaignSegment AS wel LEFT JOIN _Open AS o ON o.SubscriberKey = wel.SubscriberKey WHERE o.SubscriberKey IS NULL;
Full Join
Le FULL JOIN
récupère tous les enregistrements des deux tables, en associant
des valeurs NULL
aux lignes non appariées :
SELECT wel.SubscriberKey, wel.EmailAddress, o.EventDate AS OpenDate FROM WelcomeCampaignSegment AS wel FULL JOIN _Open AS o ON o.SubscriberKey = wel.SubscriberKey;
Self-Join
Joignez une table à elle-même pour représenter des relations hiérarchiques :
SELECT c.CategoryName AS Category, pc.CategoryName AS ParentCategory FROM WristwatchesDE AS c INNER JOIN WristwatchesDE AS pc ON pc.CategoryID = c.ParentCategoryID;
Union
Concaténez les lignes issues de plusieurs requêtes :
SELECT jan.SubscriberKey, jan.EmailAddress FROM JanuaryEventParticipants AS jan UNION SELECT feb.SubscriberKey, feb.EmailAddress FROM FebruaryEventParticipants AS feb;
Intersect
Récupérez uniquement les lignes existant dans les deux requêtes :
SELECT bf.SubscriberKey FROM BlackFridayPromoSegment AS bf INTERSECT SELECT p.SubscriberKey FROM PurchasesDataPoint AS p;
Except
Récupérez les lignes existant uniquement dans la première requête :
SELECT bf.SubscriberKey FROM BlackFridayPromoSegment AS bf EXCEPT SELECT p.SubscriberKey FROM PurchasesDataPoint AS p;
Bonnes pratiques
- Utilisez
JOIN
de manière cohérente et claire pour une meilleure lisibilité. - Exploitez les alias pour raccourcir et clarifier vos requêtes.
- Mélangez
JOIN
etUNION
pour répondre à des exigences complexes. - Utilisez des diagrammes de Venn pour visualiser et déboguer des requêtes multi-join.
SFMC SQL WHERE
Utilisez WHERE
pour rendre votre requête plus précise. Avec SELECT
et FROM
, vous pouvez commencer à construire des requêtes, mais c’est avec
WHERE
que vous pourrez réellement filtrer les résultats.
Exemple simple
Filtrez les résultats selon des conditions :
SELECT SubscriberKey, EmailAddress FROM _Subscribers WHERE Domain = 'mateuszdabrowski.pl';
Opérateurs de base
Quelques opérateurs courants :
- = : Égal à
- != ou <> : Différent de
- >, <, >=, <= : Opérateurs de comparaison
-- Exemple : Tous les abonnés qui ne sont pas en statut unsubscribed SELECT SubscriberKey, EmailAddress FROM _Subscribers WHERE Status != 'unsubscribed';
Opérateur LIKE
Utilisez LIKE
avec des jokers pour filtrer les enregistrements selon des correspondances partielles :
-- Exemple : Tous les abonnés avec un abonnement "Phone" SELECT SubscriberKey, EmailAddress FROM MasterSubscriberDE WHERE ActiveSubscription LIKE '%Phone%';
Opérateurs logiques
Combinez vos conditions avec AND
et OR
:
-- Exemple : Abonnés avec un abonnement Phone ET qui sont dans leur 12e mois SELECT SubscriberKey, EmailAddress FROM MasterSubscriberDE WHERE ActiveSubscription LIKE '%Phone%' AND CONVERT(DATE, SubscriptionStart) >= DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE())) AND CONVERT(DATE, SubscriptionStart) < DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE()));
Raccourcis BETWEEN et IN
Utilisez BETWEEN
pour les plages et IN
pour plusieurs valeurs :
-- Exemple : Filtrer par plage de dates SELECT SubscriberKey, EmailAddress FROM MasterSubscriberDE WHERE SubscriptionStart BETWEEN DATEADD(MONTH, -12, CONVERT(DATE, GETUTCDATE())) AND DATEADD(MONTH, -11, CONVERT(DATE, GETUTCDATE())); -- Exemple : Filtrer par plusieurs statuts SELECT SubscriberKey, EmailAddress FROM _Subscribers WHERE Status IN ('held', 'unsubscribed', 'bounced');
Opérateur NOT
Excluez certains enregistrements à l’aide de NOT
:
-- Exemple : Exclure certains statuts SELECT SubscriberKey, EmailAddress FROM _Subscribers WHERE Status NOT IN ('held', 'unsubscribed', 'bounced');
CASE dans WHERE
Utilisez CASE
pour un filtrage conditionnel :
-- Exemple : Filtrer selon l’adresse e-mail préférée SELECT SubscriberKey, EmailAddress FROM MasterSubscriberDE WHERE EmailAddress != CASE WHEN PreferredEmail = 'Personal Email' THEN PersonalEmail WHEN PreferredEmail = 'Work Email' THEN WorkEmail END;
Bonnes pratiques
- Utilisez
IN
pour plusieurs valeurs plutôt que de multiplesOR
. - Optimisez les plages de dates avec
BETWEEN
, en faisant attention au formatage. - Combinez
AND
etOR
avec des parenthèses pour plus de clarté.
Instruction SFMC SQL CASE
L’instruction CASE
en SQL vous permet d’évaluer plusieurs conditions et de
renvoyer différents résultats. Elle est idéale pour reformater les données, les standardiser
et créer des sorties dynamiques dans Salesforce Marketing Cloud (SFMC).
Exemple de base
Traduire des niveaux d’adhésion :
SELECT ContactKey, EmailAddress, CASE MemberType__c WHEN 1 THEN 'Bronze' WHEN 2 THEN 'Silver' WHEN 3 THEN 'Gold' WHEN 4 THEN 'Platinum' ELSE 'Unregistered' END AS MemberType FROM MembersDE;
Dans cet exemple :
- WHEN : Spécifie la condition à vérifier.
- THEN : Retourne la valeur si la condition est vraie.
- ELSE : (Optionnel) Valeur par défaut si aucune condition n’est remplie.
Search CASE
Créez des conditions dynamiques avec Search CASE :
SELECT ContactKey, EmailAddress, CASE WHEN IsAppInstalled = 1 THEN 'Push' WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email' WHEN PhoneOptIn = 1 AND Mobile IS NOT NULL THEN 'Phone' END AS PreferredChannel FROM ContactsDE;
CASE imbriqué
Vous pouvez imbriquer des CASE
pour une logique plus complexe :
SELECT ContactKey, CASE WHEN MemberType = 'Platinum' THEN 'Key Account Manager' WHEN MemberType IN ('Gold', 'Silver') THEN CASE WHEN IsAppInstalled = 1 THEN 'Push' WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email' END WHEN MemberType = 'Bronze' THEN CASE WHEN IsAppInstalled = 1 THEN 'Push' WHEN EmailOptIn = 1 AND EmailAddress IS NOT NULL THEN 'Email' END END AS PreferredChannel FROM MembersDE;
LIKE dans un CASE
Utilisez LIKE
dans un CASE
pour des conditions basées sur du texte :
SELECT ContactKey, CASE WHEN EmailAddress LIKE '%@company.com' THEN 'Internal' ELSE 'External' END AS ContactType FROM _Subscribers;
Raccourci IIF
Pour des conditions simples, utilisez IIF
:
SELECT SubscriberKey, IIF(Status = 'active', 'TRUE', 'FALSE') AS Sendable FROM _Subscribers;
Valeurs dynamiques dans CASE
Exploitez des colonnes de manière dynamique avec CASE
ou IIF
:
SELECT SubscriberKey, IIF(PreferredChannel = 'Email', EmailAddress, MobileNumber) AS PointOfContact FROM MasterDE;
Bonnes pratiques
- Utilisez
CASE
pour la logique complexe multi-conditions. - Privilégiez
IIF
pour des conditions simples et une meilleure lisibilité. - Hiérarchisez les conditions
CASE
dans l’ordre de priorité. - Exploitez les
CASE
imbriqués pour des logiques à plusieurs niveaux.
SFMC SQL LIKE
L’opérateur LIKE
vous permet d’utiliser des jokers et des groupes pour filtrer
des enregistrements basés sur des fragments de valeur. Il est très utilisé à la fois dans
les instructions SELECT
et WHERE
.
Utilisation de base
Faites correspondre les domaines e-mail en utilisant des jokers :
SELECT SubscriberKey, EmailAddress FROM _Subscribers WHERE EmailAddress LIKE '%@mateuszdabrowski.pl';
Cette requête récupère toutes les adresses e-mail se terminant par @mateuszdabrowski.pl
.
Jokers
- % : Correspond à zéro, un ou plusieurs caractères.
- _ : Correspond exactement à un caractère.
Exemple avec _
:
SELECT SubscriberKey, EmailAddress, RecommendedProducts FROM EcommerceUpsellDE WHERE RecommendedProducts LIKE '_' OR RecommendedProducts LIKE '_,%' OR RecommendedProducts LIKE '%,_,%' OR RecommendedProducts LIKE '%,_';
Opérateur de groupe
L’opérateur []
permet de faire correspondre n’importe quel caractère figurant
à l’intérieur du groupe. Exemple :
SELECT SubscriberKey, EmailAddress, RecommendedProducts FROM EcommerceUpsellDE WHERE RecommendedProducts LIKE '[1234]' OR RecommendedProducts LIKE '[1234],%' OR RecommendedProducts LIKE '%,[1234],%' OR RecommendedProducts LIKE '%,[1234]';
Opérateur de plage
Utilisez -
pour définir des plages :
SELECT SubscriberKey, EmailAddress, RecommendedProducts FROM EcommerceUpsellDE WHERE RecommendedProducts LIKE '[1-4]' OR RecommendedProducts LIKE '[1-4],%' OR RecommendedProducts LIKE '%,[1-4],%' OR RecommendedProducts LIKE '%,[1-4]';
Opérateur d’exclusion
Excluez certains caractères en utilisant ^
:
SELECT SubscriberKey FROM _Subscribers WHERE SubscriberKey LIKE '%[^a-zA-Z0-9]%' AND LEN(SubscriberKey) != 18;
NOT LIKE
Filtrez les enregistrements qui ne correspondent pas à un modèle :
SELECT ContactKey, CASE WHEN EmailAddress NOT LIKE '%@mateuszdabrowski.pl' THEN 'External' ELSE 'Internal' END AS ContactType FROM _Subscribers;
Fonctions de date SFMC SQL
Maîtrisez les dates avec les fonctions SQL intégrées. Ces fonctions sont indispensables pour manipuler et formater les dates dans Salesforce Marketing Cloud (SFMC).
GETDATE & GETUTCDATE
Obtenez l’horodatage actuel :
SELECT GETDATE() AS CurrentDate;
Pour l’horodatage UTC :
SELECT GETUTCDATE() AS CurrentUTCDate;
DATEPART
Extrait une partie spécifique d’une date :
SELECT SubscriberKey, EmailAddress FROM Ent._Subscribers WHERE DATEPART(YEAR, DateJoined) = 2020;
Exemple de raccourci :
SELECT SubscriberKey, EmailAddress FROM Ent._Subscribers WHERE YEAR(DateJoined) = 2020;
DATENAME
Extrait le nom d’une partie d’une date :
SELECT SubscriberKey, DATENAME(WEEKDAY, DateJoined) AS DayJoined FROM Ent._Subscribers;
DATEADD
Ajoutez ou soustrayez un intervalle à une date :
SELECT GETUTCDATE() AS TrialStartDate, DATEADD(DAY, 7, GETUTCDATE()) AS TrialEndDate;
Exemple avec des plages :
SELECT SubscriberKey, EmailAddress FROM EventRegistration WHERE EventDate BETWEEN GETDATE() AND DATEADD(MONTH, 1, GETDATE());
DATEDIFF
Calcule la différence entre deux dates :
SELECT SubscriberKey, DATEDIFF(DAY, DateJoined, GETDATE()) AS SubscriptionTime FROM Ent._Subscribers;
AT TIME ZONE
Ajoutez ou modifiez les informations de fuseau horaire :
SELECT CONVERT(DATETIME2(0), '2020-01-01T18:00:00') AT TIME ZONE 'Central Standard Time' AS CST, CONVERT(DATETIME2(0), '2020-07-01T18:00:00') AT TIME ZONE 'Central Standard Time' AS CDT;
FORMAT
Formatez les dates pour la personnalisation ou l’export :
SELECT FORMAT(CONVERT(DATE, '10/30/2020'), 'd', 'en-GB') AS DateOrderedProperly, FORMAT(GETUTCDATE(), 'dd/MM/yyyy') AS TodayCustomFormat, FORMAT(DateJoined, 'D', 'de-DE') AS DateExpandedIndian;
Fonctions numériques SFMC SQL
Prenez le contrôle des nombres grâce aux fonctions SQL intégrées. Elles sont indispensables pour manipuler et formater les valeurs numériques dans Salesforce Marketing Cloud (SFMC).
MIN et MAX
Trouvez la valeur minimum et maximum :
SELECT MAX(s.BounceCount) AS HighestBounceCount FROM _Subscribers AS s;
Cas d’utilisation pour trouver les gagnants d’un concours :
SELECT comp.SubscriberKey, comp.CompetitionPoints FROM CompetitionDataExtension AS comp WHERE comp.CompetitionPoints = ( SELECT MAX(comp2.CompetitionPoints) FROM CompetitionDataExtension AS comp2 );
Déboguez les Data Extensions avec MAX :
SELECT MAX(LEN(c.Id)) AS SubscriberKey, MAX(LEN(c.Email)) AS EmailAddress FROM Contact_Salesforce AS c;
AVG
Calculez la valeur moyenne :
SELECT AVG(s.BounceCount) AS AverageBounceCount FROM _Subscribers AS s;
Exemple pour trouver l’âge moyen des abonnés (idée) :
SELECT DATEDIFF(MONTH, CONVERT(DATETIME, AVG(CONVERT(FLOAT, DateJoined))), GETDATE()) AS SubscribersAverageAgeInMonths FROM _Subscribers;
SUM
Calculez la somme des valeurs :
SELECT SUM(BounceCount) AS AllBouncesCount FROM _Subscribers;
FORMAT avec les nombres
Formatez des valeurs numériques :
SELECT FORMAT(1234.56, 'N') AS WithoutCustomPrecision, FORMAT(1234.56, 'N1') AS RoundedWithCustomPrecision;
Exemple de formatage personnalisé :
SELECT FORMAT(CONVERT(BIGINT, ea.MobileNumber), '(###) ### ### ###') AS FormattedPhone FROM _Subscribers AS s INNER JOIN EnterpriseAttribute AS ea ON ea._SubscriberID = s.SubscriberID;
Un autre exemple de formatage personnalisé :
SELECT FORMAT(VIPDiscount, 'P') AS StandardFormattedVIPDiscount, FORMAT(VIPDiscount, '-00.##%') AS CustomFormattedVIPDiscount FROM SomeDataExtension;
Fonctions de conversion SFMC SQL
Brisez les limites des types de données sources. Utilisez les fonctions de conversion SQL pour transformer vos valeurs dans Salesforce Marketing Cloud.
CAST & CONVERT
CAST
Syntaxe de base pour la conversion de type :
SELECT SubscriberKey FROM Ent._Subscribers WHERE DateJoined > CAST('2020-10-30' AS DATE);
CONVERT
Similaire à CAST, avec des fonctionnalités supplémentaires :
SELECT SubscriberKey FROM Ent._Subscribers WHERE DateJoined > CONVERT(DATE, '2020-10-30');
Ajout de codes de style pour des formats non standard :
SELECT SubscriberKey FROM _Subscribers WHERE DateJoined > CONVERT(DATE, '30/10/2019', 103);
Formatage de dates avec CONVERT
Exemples de sortie formatée :
SELECT CONVERT(NVARCHAR, GETDATE(), 101) AS DateFormat1, /* Output: 10/30/2020 */ CONVERT(NVARCHAR, GETDATE(), 107) AS DateFormat2 /* Output: Oct 30, 2020 */
Types de données
Types de données couramment utilisés dans Salesforce Marketing Cloud :
- NVARCHAR : Le meilleur choix pour les chaînes de caractères
- DECIMAL : Idéal pour les nombres décimaux précis
- INT : À utiliser pour les entiers
- DATETIME2 : Pour les formats de date et heure modernes
- DATE : Pour les valeurs de date uniquement
Exemple pour spécifier la précision et l’échelle :
SELECT CONVERT(DECIMAL(5, 2), '123.99') AS FullConversion; /* Output: 123.99 */
Codes de style CONVERT Date
Codes de style de date populaires :
- 101 : MM/dd/yyyy
- 103 : dd/MM/yyyy
- 107 : MMM dd, yyyy
- 120 : yyyy-MM-dd HH:mm:ss
Utilisation des codes de style dans les requêtes :
SELECT CONVERT(NVARCHAR, GETDATE(), 101) AS DateAsString, CONVERT(DATETIME2, '2020-12-31 19:00:00', 120) AS StringAsDate;
Gérer les formats non pris en charge
Si un format de date n’est pas directement pris en charge :
SELECT CONVERT(DATETIME, LEFT('27/12/2021 07:31:01', 10), 103) + CONVERT(DATETIME, RIGHT('27/12/2021 07:31:01', 8), 108) AS ConvertedDate;