转换' NULL'在SQL中的日期

时间:2016-11-19 05:26:19

标签: sql string date type-conversion

我的表格中有一列名为startdate。它是字符串格式。大多数字段都是' NULL'。我正在将此列复制到另一个数据类型为' Date'的表中。 如何在SQL中将所有值从字符串转换为Date。 我试过这段代码:

INSERT INTO Destination_Table [new_date] 
SELECT CONVERT(DATE,[startdate],103) 
FROM Source_Table

2 个答案:

答案 0 :(得分:1)

看起来你正在使用MSSQL。如果您使用的是MSSQL 2012,则以下代码应该可以使用:

INSERT INTO Destination_Table [new_date] 
SELECT IIF([startdate] = "NULL", null, CONVERT(DATE,[startdate],103)) 
FROM Source_Table

这样做是使用IIF()方法检查[startdate]的值,如果值是文本“NULL”,则返回实际的null值,该值可以是除非您在Destination_Table[new_date]字段上禁用了空值,否则在大多数字段中都允许使用。

由于Date字段只能接受和存储日期/时间/日期&时间/(实际空)信息,因此文本“NULL”无效。

以下是MySQL的等价物

INSERT INTO Destination_Table [new_date] 
SELECT IF([startdate] == 'NULL', null, CONVERT(DATE,[startdate],103)) 
FROM Source_Table

(虽然我不确定MySQL是否允许将转换代码作为CONVERT()的参数)

答案 1 :(得分:1)

nullif([startdate],'NULL')返回[startdate],除非它等于'NULL'然后它返回NULL(真正的NULL,而不是字符串'NULL')

nullif(x,y)

出于学习目的,以下是一些结果相同的表达式:

case when x=y then null else x end
case x when y then null else x end
public interface Insertable<L extends RealmObject & InsertableList> {
    Class<L> getListClass();
    List<L> getList();
    String getListIdField();
}

public interface InsertableList {
    String getId();
}

public <T extends RealmObject & Insertable<L>, L extends RealmObject & InsertableList> void insertData(final T insertable) {
    final Realm realm = getExplicitRealm();
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            int newListSize = insertable.getList().size();
            T dbInsertable = realm.where((Class<T>)insertable.getClass()).findFirst();

            if(dbInsertable != null) {
                for(int i = 0; i < newListSize; i++) {
                    L temp = realm.where(insertable.getListClass())
                            .equalTo(insertable.getListIdField(), insertable.getList().get(i).getId())
                            .findFirst();
                    if(temp != null) {
                        dbInsertable.getList().set(i, temp);
                    } else {
                        dbInsertable.getList().add(insertable.getList().get(i));
                    }
                }
            } else {
                realm.copyToRealmOrUpdate(insertable);
                Log.i(TAG, "insertDealersData : dump");
            }
        }
    }, new Realm.Transaction.Callback(){
        @Override
        public void onSuccess() {
            realm.close();
        }
        @Override
        public void onError(Exception e ) {
            realm.close();
        }
    });
}

public class Dealers extends RealmObject implements Insertable<DealersList> {
    private String status;
    private String errorMessage;
    private String count;
    @PrimaryKey
    private String userId;
    private String organizationId;
    @JsonField(name="dealers", typeConverter = DealersListConverter.class)
    private RealmList<DealersList> dealersLists;

    @Override
    public Class<DealersList> getListClass() {
        return DealersList.class;
    }

    @Override
    public List<DealersList> getList() {
        return dealersLists;
    }

    @Override
    public String getListIdField() {
        return "_id";
    }
}


public class DealersList extends RealmObject implements InsertableList {


    @PrimaryKey
    private String _id;
    private String dealerid;
    private String accountnumber;
    private String name;
    private String alletec_type;
    private String telephone1;

    @Override
    public String getId() {
        return _id;
    }
}