我的表格中有一列名为startdate
。它是字符串格式。大多数字段都是' NULL'。我正在将此列复制到另一个数据类型为' Date'的表中。
如何在SQL中将所有值从字符串转换为Date。
我试过这段代码:
INSERT INTO Destination_Table [new_date]
SELECT CONVERT(DATE,[startdate],103)
FROM Source_Table
答案 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;
}
}