specify delimiter in openrowset bulk insert
but if one of the fields in the csv files contains a comma( , )


If all lines contains a comma, the solution can be

&lt;ROW&gt;  
  &lt;COLUMN SOURCE="1" NAME="username" xsi:type="SQLSMALLINT"/&gt;  
  &lt;COLUMN SOURCE="2" NAME="name1" xsi:type="SQLNVARCHAR"/&gt;  
  &lt;COLUMN SOURCE="3" NAME="name2" xsi:type="SQLNVARCHAR"/&gt;  
  &lt;COLUMN SOURCE="4" NAME="IP" xsi:type="SQLNVARCHAR"/&gt;  
  &lt;COLUMN SOURCE="5" NAME="title" xsi:type="SQLNVARCHAR"/&gt;  
&lt;/ROW&gt; 


INSERT INTO [player table]
SELECT 20190331, 
       username, 
       name1+','+name2, 
       IP, 
       title 
FROM  OPENROWSET( BULK 'D:\folder\2019\03-31\Player_statistics.csv', 
                  FIRSTROW = 2, 
                  FORMATFILE='D:\folder\test\xml\Player_statistics.xml') t1


If only some lines contains commas, and none title is null/empty, then try

INSERT INTO [player table]
SELECT 20190331, 
       `username`, 
       CASE WHEN title IS NULL 
            THEN name1
            ELSE name1+','+name2 END, 
       CASE WHEN title IS NULL 
            THEN name2
            ELSE IP END, 
       CASE WHEN title IS NULL 
            THEN IP
            ELSE title END
       IP, 
       title 
FROM  OPENROWSET( BULK 'D:\folder\2019\03-31\Player_statistics.csv', 
                  FIRSTROW = 2, 
                  FORMATFILE='D:\folder\test\xml\Player_statistics.xml') t1


If some title is null/empty, I cannot find simple way to distinguish.

UPDATE

The solution can be: divide your CSV on two fields only - username and the whole slack, the slack then can be divided to separate fields using common string functions in the SELECT part of importing query (maybe with using intermediate variables in chain calculations).