在EXCEL VBA模块上解决此错误。在Oracle 11g界面上,它运行良好。
Package com.example.rami_.esmatsongs;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.theartofdev.edmodo.cropper.CropImage;
import com.theartofdev.edmodo.cropper.CropImageView;
import static android.app.Activity.RESULT_OK;
/**
* A simple {@link Fragment} subclass.
*/
public class AccountFragment extends Fragment {
private ImageView profile_picture;
private TextView edit_profile_picture;
public AccountFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_account, container, false);
profile_picture = (ImageView) view.findViewById(R.id.profilePicture);
profile_picture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cropImage();
}
});
edit_profile_picture = (TextView) view.findViewById(R.id.changeProfilePic);
edit_profile_picture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cropImage();
}
});
return view;
}
public void cropImage() {
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setMinCropResultSize(512, 512)
.setAspectRatio(1, 1)
.getIntent(getContext());
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
Uri postImageUri = result.getUri();
profile_picture.setImageURI(postImageUri);
} else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
}
}
}
}
预期结果是我不应该收到错误,而实际结果是===>当我在ORACLE SQL Developer中运行相同的查询时,它可以完美运行,但不能在excel VBA模块中运行。
答案 0 :(得分:1)
尽管使用了to_date函数
实际上是因为使用了to_date()
函数。你有这样的事情:
TO_DATE(SYSDATE,'DD-MM-YYYY')
TO_DATE(s2.end_time,'DD-MM-YYYY')
TO_DATE(next_day(SYSDATE,'SATURDAY'),'DD-MM-YYYY')
TO_DATE(next_day(SYSDATE,'SATURDAY')-(INTERVAL '7' DAY + INTERVAL '1' SECOND),'DD-MM-YYYY')
第二个可能可以,但是仅当sd.end_time
存储为字符串时-几乎肯定不应该这样做。
至少对于其他三个,您正在将已经是日期的传递给函数,该函数可以将字符串转换为日期。因此,您实际上在做,例如:
TO_DATE(TO_CHAR(SYSDATE),'DD-MM-YYYY')
,因为隐式TO_CHAR()
没有格式模型,它将使用会话的NLS设置,特别是NLS_DATE_FORMAT
。您会看到它在一种环境中工作,因为那里的设置有效地表明它正在运行:
TO_DATE(TO_CHAR(SYSDATE, 'DD-MM-YYYY'),'DD-MM-YYYY')
在另一个会话中,它实际上可能正在做:
TO_DATE(TO_CHAR(SYSDATE, 'DD-MON-RR'),'DD-MM-YYYY')
...将失去世纪,将日期值保留在0019年而不是2019年;或
TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD'),'DD-MM-YYYY')
如您所见,它会抛出“ ORA-01861:文字与格式字符串不匹配”。
尽管您可以尝试强制每个客户端和应用程序上的NLS设置与您的操作相匹配,但最终会出错,因此您应该进行所有转换。只需使用SYSDATE
和其他直接计算出的值即可;或者,如果您想获取时间设置为午夜的日期,则将其截断:
trunc(SYSDATE)
trunc(s2.end_time)
trunc(next_day(SYSDATE,'SATURDAY'))
trunc(next_day(SYSDATE,'SATURDAY')-(INTERVAL '7' DAY + INTERVAL '1' SECOND))
还请注意,next_day()
的第二个参数是当前会话日期语言中的日期名称或缩写,因此从会话中以另一种语言运行该日期的人也会看到错误(例如“ ORA-01846:不是一周中的有效日期”。